C++

mutex と atomic の違いは何か、どちらが良いか

C++

どちらも排他制御にかかわる仕組みである。 どのような場合に、どちらを選ぶべきか https://teratail.com/questions/54740 「mutexそれ自体が重い」というのは単なる盲信の事が多いと思います。mutexロック獲得・解放にかかる処理負荷は実処理に比べれば無視…

gdb ハッシュテーブル系 STL の要素を取り出す方法

std::unordered_map などの中身を取り出したい場合、gdb だと .at() や operator[] では print できなかった。 では、特定 key の要素を取り出すにはどうすれば良いか gdb には STL をいい感じに print してくれる拡張があり、ソースコードは python なので…

gdb においてスマートポインタは直接生ポインタに cast できる

shared_ptr 等のスマートポインタは フィールド _M_ptr に生ポインタを保管しているが、これはメモリ上では先頭にあたるので、 _M_ptr を取らなくても、先頭のアドレスから直接生ポインタに cast できる。 gdb でスマートポインタの値を表示したいときに便利…

C++のconstについて復習

C++

通常変数のconst const T // 中身の書き換えを禁止する。Tがクラス・構造体の場合そのクラス・構造体のメンバがすべてconst扱いとなる。 ポインタ変数のconst const T* // 中身の書き換えが禁止されたポインタ。ただし、このポインタを使っての書き換えが禁…