タグ

ブックマーク / yohhoy.hatenablog.jp (4)

  • volatile教、あるいはvolatile狂 - yohhoyの日記(別館)

    かつてのMicrosoft Visual Studio .NET 2003のC/C++コンパイラ(MSVC7.1)には、「volatile変数にオレオレ定義の意味を与えて最適化を行う」というアグレッシブすぎるオプションが存在したという昔話。 どんなもの? このオプションでは、volatileキーワードにC/C++標準規格とは全く異なる独自の意味を与えて、コード生成時の最適化処理に利用します。つまり、コンパイル時に下記を前提としたコード生成を行うのです。 通常の変数=変数実体にアクセスする手段は1通りだけ(aliasingが無い) volatile変数=上記制約の範囲外(aliasingが有る) これは「volatile=aliasingが有りえる」というMSVC7.1だけの独自拡張です。*1 このaliasing(エイリアシング; 別名)という単語、少々耳慣れないかもしれません。alias

    volatile教、あるいはvolatile狂 - yohhoyの日記(別館)
  • 本当は怖くないムーブセマンティクス - yohhoyの日記(別館)

    この記事はC++ Advent Calendar 2012の15日目にエントリしています。 内容はC++11「ムーブセマンティクス」の入門記事となっています。 もくじ ムーブセマンティクス再考 シンタックス vs. セマンティクス コピー vs. ムーブ ムーブのもつ2つの意味 C++11のムーブセマンティクス対応 auto_ptrからunique_ptrへ auto_ptrの暗い過去 unique_ptrへの移行 std::moveの役割 ムーブセマンティクスを使おう C++11標準ライブラリとムーブ ムーブ"後"の中身は? ムーブを利用して関数を書く (文のみ約9500字) まえがき To move or not to move: that is the question. ― Bjarne Stroustrup, 2010(改)*1 プログラミング言語C++の新しい国際標準規格*2

    本当は怖くないムーブセマンティクス - yohhoyの日記(別館)
    USAGI-WRP
    USAGI-WRP 2012/12/16
    [std::move][how to][starter][yohhoy][2012][C++ Advent Calendar 2012] とても丁寧な解説
  • C++スレッド遅延開始の実装5パターン - yohhoyの日記(別館)

    局所的に「スレッド開始を遅延させる」ネタが盛り上がっていたので、C++とBoostライブラリを用いた色々な実装方法をまとめてみました。 この記事で対象とするのは、下記コードにある2つの要件を満たす実装方法です。 (1) スレッドを管理するオブジェクトXのコンストラクト時ではなく、その後の任意タイミングで新スレッド処理を開始する。 (2) オブジェクトXのデストラクト時に、上記(1)の別スレッドがまだ実行中ならそのスレッド処理完了を待機する。 class X { // threadオブジェクトを保持するメンバ変数 void do_() { /* 別スレッド処理 */ } public: ~X() { // (2) 別スレッドがまだ実行中なら完了を待機する } void start() { // (1) 新しいスレッドを開始して関数do_を実行する } }; int main() { X x;

    C++スレッド遅延開始の実装5パターン - yohhoyの日記(別館)
  • Boost.Contextでファイバーライブラリを実装してみた - yohhoyの日記(別館)

    Boost 1.50.x候補のBoost.Contextライブラリを利用して、一風変わったファイバーライブラリを作ってみたというお話です。(注意:Boost.ContextはBoost 1.49.0の正式リリースには含まれないため、svnレポジトリのtrunkからチェックアウトする必要アリ) 注意:2012年5月現在、Boost.Contextの破壊的API変更により実装コードはコンパイルできなくなっています。id:FlastさんのBoost.Contextの怒涛の変更も参照ください。 何これ?何ができるの? 一言で表現すると「単一スレッドで動作するスレッドライブラリ」です。 これだけだと白い目で見られそうなので…もうちょい説明的な表現では「C++11標準ライブラリ相当の同期プリミティブ群を提供する、ノンプリエンティブなスレッドライブラリ」となるでしょうか。さらに協調的同期プリミティブとし

    Boost.Contextでファイバーライブラリを実装してみた - yohhoyの日記(別館)
  • 1