タグ

C++に関するMonMonMonのブックマーク (326)

  • C-Based Toolchain Hardening - OWASP Cheat Sheet Series

    Introduction Index Alphabetical Index ASVS Index MASVS Index Proactive Controls Index Top 10 Cheatsheets C-Based Toolchain Hardening Cheat Sheet¶ Introduction¶ C-Based Toolchain Hardening is a treatment of project settings that will help you deliver reliable and secure code when using C, C++ and Objective C languages in a number of development environments. This article will examine Microsoft and

  • Zngur - Zngur

    Zngur Zngur (/zængɑr/) is a C++/Rust interop tool. It tries to expose arbitrary Rust types, methods, and functions while preserving its semantics and ergonomics as much as possible. Using Zngur, you can use arbitrary Rust crate in your C++ code as easily as using it in normal Rust code, and you can write idiomatic Rusty API for your C++ library inside C++. Idea Rust and C++ are similar languages b

  • [C++] autoによるキャスト - 地面を見下ろす少年の足蹴にされる私

    C++23からauto(x)の形式のキャストが可能になります。 template<std::copy_constructible T> void f(T x) { T p = auto(x); // ok、C++23から } これに関連する仕様等のメモです。 prvalue値へのキャスト 細かい仕様の話 利点や用途 decay-copyとの違い 規格書における置き換え コンセプト定義における利用例 参考文献 prvalue値へのキャスト auto(x)の形式のキャストはxをその型をdecayした型の値としてキャストするものです。 型のdecayとはその型からCV/参照修飾を取り除き、配列/関数はそのポインタに変換するものです。配列/関数以外の場合、autoによるキャストはxをその型のprvalueへキャストします。 そして、auto(x)のキャストは単なる型変換ではなく、キャスト結果のpr

    [C++] autoによるキャスト - 地面を見下ろす少年の足蹴にされる私
  • strlen() の深淵 - Qiita

    あらまし strlen() という関数がある。御存知の通り、文字列の長さを算出する標準 C ライブラリの関数だ。 やってることは単純で、例えば以下のように実装できる。 size_t strlen_simple(const char* str) { const char* p = str; while (*p) ++p; return size_t(p - str); } '\0' が見つかるまでポインタを進め、初期位置との差分を返すだけだ。これで機能的には std::strlen() と同等である。 では、速度的にはどうだろう?適当にベンチマークを書いて MSVC 2022 でコンパイル&実行するとこうなった。

    strlen() の深淵 - Qiita
  • 徐々に高度になるリングバッファの話 - Software Transactional Memo

    リングバッファのイメージ図 1. リングバッファとは何か 機能的にはFirst In First Out (FIFO)とも呼ばれるキューの一種であるが、リング状にバッファを置いてそれの中でReadとWriteのインデックスがグルグルと回る構造をとる事によって容量に上限ができることと引き換えに高速な読み書き速度を得たものである。キューを単に実装するだけなら山ほど方法があって線形リストを使ってもいいしスタックを2つ使っても原理的には可能だ。その中でもリングバッファを用いた方法の利点はひとえに性能の高さでありメモリ確保などを行わないお陰でシステム系の様々な場所で使われている。 これの実装自体は情報系の大学生の演習レベルの難度であるが少し奥が深い。まずリングバッファのスタンダードなインタフェースと実装は以下のようなものである。 class RingBuffer { public: explicit

    徐々に高度になるリングバッファの話 - Software Transactional Memo
  • Pythonコードを35000倍に高速化したい

    はじめに Pythonは世界的にも人気のあるプログラミング言語ですが、実行速度については課題があります。Pythonの実行速度を高速化したい、という要求は根強く、これまでにも様々な処理系が開発されています。 この記事はPythonで書かれたコードを35000倍に高速化するにはどのような方法があるかについてまとめたものです。 この記事は: Pythonで書かれたアルゴリズムを35000倍に高速化する 事前コンパイル、並列化、SIMD演算を駆使する 最終的に44000倍まで高速化できた なぜ35000倍? 2023年5月2日にModular社よりPythonの使いやすさとC言語の性能を兼ね備える新しいプログラミング言語、Mojoの開発について発表がありました。低レベルのハードウェア向けにコンパイル可能なこと、文法的にはPythonを踏襲しており、既存のPythonライブラリを利用可能であること

    Pythonコードを35000倍に高速化したい
  • Webサーバーアーキテクチャ進化論2023

    はじめに 最近プログラマーとしてのキャリアに一区切りつけようと思っており、これまでのプログラミングの勉強の集大成となるブログを書きたくなったので書く。初めてプログラミングをして、フロントエンド開発をして、サーバーから値が返ってきたときは「どういう仕組みで値が返ってきたんだ?」と疑問に思っていた。ずっと理解したくて理解できていなかった。だからずっと勉強していた。そして最近になってようやく自分の言葉で説明できるようになった気がしたのでブログを書きたい。 2015 年版が自分の原点であり、この記事を書くモチベーションになった このような記事は実は過去に存在している。 FYI: https://blog.yuuk.io/entry/2015-webserver-architecture その記事はサーバーがどういう仕組みで動いていて、どのように進化し、2015 年に至るかを解説してくれた記事だ。自

    Webサーバーアーキテクチャ進化論2023
  • Pfi Seminar 2010 1 7

    3. Caution!  発表には次のものは含まれません  C++の有用なプログラミング技法  広くつかわれるべきテクニック  その他なにか視聴者に役立つもの  そういうのを期待された方はあしからず 4. 自己紹介  田中英行 (@tanakh, id:tanakh)  Haskell愛好家  C++歴  1998年 ~  2005年ぐらいまでは漫然と使っていました  社内用C++ライブラリ(pficommon)を作成  C++のきもさを再認識  その辺で得られた知見を話します ○ ※実際に使われているわけではないです

    Pfi Seminar 2010 1 7
  • boost::serializationの使い方

    boost::serializationを使う はじめに コンパイル 簡単な使い方 クラスのバージョン付け 読み込みと書き込みで別の動作を行う 「非侵入型」のシリアル化関数 基底クラスをシリアル化する 配列をシリアライズする constメンバはどうするか ポインタからのシリアライズ:その1 ポインタからのシリアライズ:その2 基底クラスへのポインタから復元する 実装レベル オブジェクトの追跡 抽象クラスでのエラー NVP ロケールの設定 はじめに boost C++ Libraries(以下単にboost)という非常に便利なライブラリがあります。 次期C++標準にこのライブラリのうちのいくつかが採用されるらしいという話もあり、 C++開発者にとっては無視して通れないライブラリです。 そんなboostの中に、serializationというライブラリがあります。 一言で言ってしまえば、「クラ

  • C/C++でのメモリリーク検出方法 〜AddressSanitizer, Valgrind, mtrace〜 - kivantium活動日記

    C/C++でプログラムを書いているときに遭遇する厄介なバグの一つがメモリリークです。 今回はメモリリークを検出するのに使えるツールの使い方について書きます。 AddressSanitizer コンパイルオプションをつけるだけで使えて出力も見やすいのでおすすめです。 AddressSanitizerはGCC 4.8以降かLLVM 3.1以降で使うことができます。 コンパイル時にオプションをつけるだけでメモリリークを検出してくれます。(若干実行時間が長くなります) 以下のメモリリークのあるプログラム leak.cpp を例に使い方を説明します。 int main() { int *a = new int[10]; } newで作った動的配列をdeleteしていないのでメモリリークになります。 g++ -fsanitize=address -fno-omit-frame-pointer -g l

    C/C++でのメモリリーク検出方法 〜AddressSanitizer, Valgrind, mtrace〜 - kivantium活動日記
  • 【改訂版】組込みソフトウェア開発向けコーディング作法ガイド[C++言語版] Ver. 2.0.pdf

  • プログラム解析入門、もしくはC/C++を安全に書くのが難しすぎる話

    プログラム解析入門 もしくはC/C++を安全に書くのが難しすぎる話 Last updated: Jul 30, 2022 Kinuko Yasuda <@kinu>

    プログラム解析入門、もしくはC/C++を安全に書くのが難しすぎる話
  • Adding C++17 structured bindings support to your classes

    Introduction C++17 adds structured bindings (proposals here and here) to the language, which allow you to declare multiple variables initialised from a tuple-like object: tuple<T1,T2,T3> f(/*...*/) { /*...*/ return {a,b,c}; } auto [x,y,z] = f(); // x has type T1, y has type T2, z has type T3 This is a very powerful and expressive feature, but the most interesting element for me is the ability to a

  • TechFeed Conference 2022 LT「最近の C++ (2022 年)」

    TechFeed Conference 2022「最近の C++ (2022 年)」 発表者: https://twitter.com/Reputeless

    TechFeed Conference 2022 LT「最近の C++ (2022 年)」
  • C++ Core Guidelinesのすすめ - Qiita

    気になる点あればバンバン修正申請ください。 追加で紹介したいことや補足したいことなども全然構いません。 はじめに C++は非常に複雑で難しく、何でもできる言語として発展しています。 古い言語仕様からモダンな言語仕様まですべてを何でも扱うことが出来ます。 それが時に最も好かれる部分でもあり、最も嫌われる部分でもあることは事実です。 C++はより安全で効率的なコードを書けるように機能を提供しますが、 それを全員が理解して使うことは難しいです。 古のプログラマにとっては、今までの慣習から離れなければなりませんし、 生まれたてのプログラマにとっては、最新のC++の前に過去のC++から一通り学ばなければなりません。 C++登場の1983年から、C++98, C++11, C++14, C++17, C++20と進化を続けていくたびに、教科書もどんどん分厚くなっていきます。 C++はこのまま過去の古い

    C++ Core Guidelinesのすすめ - Qiita
  • Project OSRM

    Modern C++ routing engine for shortest paths in road networks.

  • 競プロで役立つC++20新機能 - Qiita

    はじめに 競プロのコーディングが快適になるC++20新機能をまとめました!! C++20の豊富な新機能から競プロで便利な機能を合計で16個紹介します. ※(2023/8/7追記) AtCoderでは2023年の言語アップデートにより、ほとんどの機能が使用可能となりました。新バージョンのgcc12.2では、紹介されている機能のうち <format> を除くすべての機能が使用可能です。 参考文献 https://cpprefjp.github.io/lang/cpp20.html https://en.cppreference.com/w/cpp/20 を参考にしました. cpprefjp以外をあまり見ていないので,間違っているところがあるかもしれません. 誤りに気づいたら指摘していただけると幸いです. 標準ライブラリの新機能 1. コンテナのメンバ関数の追加 1-1. 連想配列に conta

    競プロで役立つC++20新機能 - Qiita
  • マルチスレッド・プログラミングの道具箱

    まえがき クラウド上の仮想サーバから手元のスマートフォンまで、いまや複数のCPUコアを搭載するマルチコアはどこにでもある環境になりました。ハードウェア側が並列(Parallel)・並行(Concurrent)処理に向けて急速に進化する一方で、ソフトウェア側つまりプログラミング言語の進化はさほど追い付いていません。並行処理記述の手軽さを求めた Go言語 や、マルチスレッド処理の安全性を重視する Rust言語 などが登場してはいるものの、「普通にプログラムを記述するだけで複数CPUコア環境で高速に走るプログラミング言語」は遠い夢物語のままです。 モダンなプログラミング言語や並列・並行処理ライブラリは、複雑で難解なマルチスレッド処理を直接記述しなくてすむよう、安全性・利便性の高い抽象化レイヤを提供します(例:Go言語のgoroutineとchannel、Rust言語の Rayonライブラリ)。し

    マルチスレッド・プログラミングの道具箱
  • はじめに - アルゴリズムとデータ構造大全

    はじめに このドキュメントは,主に競技プログラミングで出題される問題を解く際に利用できるアルゴリズムやデータ構造をまとめたものです.特定の問題にはあまりフォーカスしないため,問題を解く際の考察の仕方等の内容はありません.詳しく,正確に,分かりやすく書いていこうと思っています. このドキュメントは執筆途中です. 想定する読者 C++を用いたプログラミングに慣れている方を読者として想定しており,C++言語の仕様や,文法にはあまり触れません.また,計算量という用語についても説明しません.ただし,償却計算量など,計算量の見積もりが複雑なものについては必要に応じて説明します. コードについて このドキュメントで登場するコードは,可読性向上のため,以下のようなコードがファイルの先頭に記述してあることを前提としています.また,適切な問題を用いてコードの検証がなされている場合は,コード周辺にのように,検証

  • Effective Modern C++ 勉強会 Item 22

    3. pImplイディオムとは (1) pImplイディオムを使わない場合の問題点 #include “gadget.h” class Widget { public: Widget(); … private: std::string name; std::vector<double> data; Gadget g1, g2, g3; }; Widgetを使うクライアントコードは、 gadget.h, widget.h, vector, string に依存 • includeするファイルが多いことによる コンパイル時間増大 • gadget.h と widget.h が変更されるたびに クライアントコードも再コンパイルされる [widget.h] http://bit.ly/1KjcGeb 4. pImplイディオム = – C++98からよく知られたテクニック – インターフェースと実

    Effective Modern C++ 勉強会 Item 22