Pebble Coding

ソフトウェアエンジニアによるIT技術、数学の備忘録

2016-08-01から1ヶ月間の記事一覧

std::vectorメモリ管理

std::vectorにはreserveというメソッドがあるがどのように動作するのか調べてみた。 struct Info { uint8_t* dex = nullptr; Info(){ dex = new uint8_t; *dex = 7; printf("%p Info() dex %p %d\n", this, dex, *dex); } Info(const Info& obj){ dex = new …

C/C++ 構造体アライメント最適化

C/C++の構造体の要素はある程度の境界位置にアライメントされる。そのため、要素の定義順序によって、構造体全体のサイズが変わったりする。たかが数バイトと侮るなかれ。要素数が多ければ、それだけメモリ領域が小さくなり、CPUキャッシュミスが起きる確率…

iOS/OSXにおけるスレッド優先順位

iOS/OSXではスレッドスケジューラーの出来が良く、細かい設定が可能である。 例として、CoreAudioでのコールバックスレッドのスレッドポリシーがどうなっているかみてみる。 OSX 10.11.6 1.6GHz Core i5 standard policy_count 0 get_default 1 importance 3…

macOS環境でrustを学習する

以下の日本語ドキュメントで学習します。 プログラミング言語Rust インストール ~$ curl -sSf https://static.rust-lang.org/rustup.sh | sh rustコンパイラのバージョン確認 ~$ rustc --version rustc 1.11.0 (9b21dcd6a 2016-08-15) vimシンタックスハイラ…

atomic::compare_exchange_weak C++11

bool compare_exchange_weak (T& expected, T val, memory_order sync = memory_order_seq_cst) noexcept; compare_exchange_weakの動作仕様がいつまでも覚えられないので、メモ。 覚える必要があるのは第一引数と第二引数と戻り値。 メモリオーダーはとりあ…

std::atomic における memory_order_relaxed の動作(C++11)

memory_order_relaxedの使い方がいまいち分からなかったのだが、やっと理解できたので、それについて書いておく。 memory_order_relaxedの説明を探すと以下が見つかる。 Each memory location has a total modification order Memory operations performed b…

C++11 std::atomicを使いこなすための情報リスト

C++11 std::atomicは難解です。 しかし、パフォーマンスが出ない時に頼りになるツールでもあります。 情報はなかなか少ないので、適宜まとめておきます。 CPUの動作に関する説明 CPU とキャッシュのはなし - graphics.hatenablog.com プログラミング :: 高速…

C++ 小さいサイズの構造体を引数に渡す時は値渡し、参照渡しどちらが高速か?

調べてみました。 こんなサンプルで時間を計測しました。 struct Hoge { float a; float b; }; Hoge hoge1 = { 25, 26 }; Hoge hoge2; // 値渡し void func1(Hoge hoge){ hoge2 = hoge; } // 参照渡し void func2(const Hoge& hoge){ hoge2 = hoge; } 1) flo…

C++11環境におけるatomic操作のパフォーマンス比較

C++11のatomic関数はどのくらいのパフォーマンスを出せるのか調べてみました。 short変数に対してスレッド2つを使い、スレッドAが書き込み、スレッドBが読み込みとします。 環境: Intel Core i5 1.6GHz コア数:2 2次キャッシュ(コアのキャッシュ):256KB 3次…