タグ

ブックマーク / yohhoy.hatenadiary.jp (3)

  • 標準ライブラリrandomの分布生成器は処理系依存 - yohhoyの日記

    C++標準ライブラリ<random>で提供される分布生成器(distribution)は、具体的なアルゴリズムまで規定しないため処理系毎に異なる乱数列が得られる。乱数生成エンジン(engine)のアルゴリズム/パラメータが言語仕様で定義されるのとは対照的(→id:yohhoy:20130719)。 #include <random> std::mt19937 rng; // engine std::normal_distribution<> dist; // distribution // rng()で生成される値は全処理系で同一 // dist(rng)で生成される値は処理系依存 複数の処理系間で同一乱数列を得る必要があるときは、Boost.Randomライブラリなどを利用すること。正直、C++標準でポータブルな分布生成器まで提供した方が良かったのでは… 2016-02-25追記:Boo

    標準ライブラリrandomの分布生成器は処理系依存 - yohhoyの日記
  • パスワードとmemset関数 - yohhoyの日記

    C言語プログラム上で高機密性情報(パスワード文字列など)を消去するケースで、memset関数の単純利用では機密情報がメモリ上に残存してしまい、セキュリティ上の脆弱性につながる可能性がある。 void secure_operation() { // パスワード文字列を取得 char passwd[128]; get_password(passwd, sizeof(passwd)); //... // メモリ上の高機密データを消去... memset(passwd, 0, sizeof(passwd)); // ?? } 上記コードではパスワード文字列が格納された変数passwdを使用後にゼロクリアしているが、コンパイル時の最適化によりmemset関数呼び出しが削除される可能性がある。この(プログラマの意図に反する)最適化は、C言語の言語仕様上も許容されるコンパイラの振る舞いとなっている。*1

    パスワードとmemset関数 - yohhoyの日記
  • static変数初期化とスレッドセーフ - yohhoyの日記

    yamasaさんのDCL解説記事で知った、「C++11規格においてブロックスコープなstatic変数の初期化処理はマルチスレッドセーフ」に関するメモ。 該当箇所をN3337 6.7/p4より一部引用。(下線部は強調) Otherwise such a variable is initialized the first time control passes through its declaration; such a variable is considered initialized upon the completion of its initialization. If the initialization exits by throwing an exception, the initialization is not complete, so it will be tried

    static変数初期化とスレッドセーフ - yohhoyの日記
    s_ryuuki
    s_ryuuki 2012/03/13
  • 1