yohhoyの日記

技術的メモをしていきたい日記

2012-06-01から1ヶ月間の記事一覧

なんちゃってScopeExit

C++

「nullptrを所有するshared_ptr」を使って何か面白いことが出来ないかと適当にひねり出した応用例。C++11標準ライブラリだけで Boost.ScopeExit(スコープガード)のお手軽実装。 #include <memory> #define MY_SCOPE_EXIT(name_, ...) \ std::shared_ptr<void> name_(null</void></memory>…

C++11 atomic_flagプリミティブ

C++

C++11標準ライブラリでは最もプリミティブなatomic変数としてstd::atomic_flagを提供する。これは “std::atomic<bool>から極限まで機能を削ったatomic変数” とも解釈できる。2021-03-09追記:C++20標準ライブラリでは利便性のためtest操作やwait/notify_*操作が追</bool>…

C11/C++11 TLS変数への間接アクセス

C C++

C11およびC++11の言語仕様に追加されたThread Local Storage(TLS)変数についてメモ。あるスレッドに属するTLS変数に対して他スレッドから間接的にアクセスした場合、その挙動はC11では処理系定義(implementation-defined)とされる。一方、C++11では同TLS変数…

nullptrを所有するshared_ptr

C++

C++11標準ライブラリのstd::shared_ptrでは、ヌルポインタを所有することが可能となっている。デフォルトコンストラクトされたshared_ptrオブジェクトは空(empty)となる。一方、明示的にnullptrを与えてコンストラクトしたshared_ptrオブジェクトは “ヌルポ…

mutexのconstexprコンストラクタ

C++11標準ライブラリのミューテックスクラス群においてstd::mutexのみがconstexprデフォルトコンストラクタをもつ。N3337 30.4.1.2.1, 30.4.1.2.2, 30.4.1.3.1, 30.4.1.3.2よりコンストラクタ宣言のみ引用。 30.4.1.2.1 Class mutex class mutex { constexpr…

C11/C++11/POSIXスレッドAPI比較

C11標準ライブラリ、C++11標準ライブラリ、POSIXスレッドのスレッドライブラリ(Pthreads) API比較。各スレッドライブラリAPIを、“スレッド”、“CallOnce”、“排他制御(mutex)”、“条件変数(condition variable)”、“TLS(Thread Local Storage)”、その他機能に分…

ムーブの跡

C++

C++11におけるムーブされた後のオブジェクト状態についてメモ。C++11標準規格ではムーブ後のオブジェクト状態について、下記2種類の型に対する要求を規定する。N3264のRationale参照*1。 [A] 標準ライブラリが提供するクラス [B] 標準ライブラリと組み合わせ…

POSIXメモリモデル?

POSIX規格(IEEE Std 1003.1-2001)では定式化されたメモリモデルを定義しない。 A.4.10 Memory Synchronization Formal definitions of the memory model were rejected as unreadable by the vast majority of programmers. In addition, most of the form…

2種類のstd::move関数

C++

C++11標準ライブラリのstd::move関数テンプレートには、標準ヘッダ<utility>と<algorithm>とで用途の異なる2種類が存在する。 ヘッダ<utility>のmove 変数(lvalue値)に対してムーブセマンティクスを適用するためのヘルパ関数。 ヘッダ<algorithm>のmove std::copyアルゴリズムのmove版。InputIterat</algorithm></utility></algorithm></utility>…

Joke in C/C++ Standard

C C++

プログラミング言語CおよびC++の標準規格(ドラフト)に存在していたジョーク文。atomic操作ライブラリ記述箇所に下記脚注あり。*1 Atomic objects are neither active nor radioactive. Among other implications, atomic variables shall not decay. 関連U…

The Spirit of C11

C

C11ではANSI C Rationale以来の “Cの精神(The Spirit of C)” に対して改訂が行われ、安全性・セキュリティに関する配慮が加えられた。JTC1/SC22/WG14 (PDF)N1250 C - The C1X Charter より引用(下線部は強調)。 6. Keep the spirit of C. The Committee ke…

パスワードとString型

Javaプログラム上で高機密性情報(パスワード文字列など)を扱う場合、セキュリティ的にはjava.lang.Stringクラスよりchar型の配列char[]の方が好ましい。Java言語の文字列Stringインスタンスは不変(Immutable)なオブジェクトであり、メモリ上からデータ破棄…

auto&&の落とし穴

C++

C++11で導入されたautoによる型推論とrvalue参照(T&&)に関するメモ。auto&&による型推論の結果が常にrvalue参照型となるとは限らない。 int x; auto t0 = x; // t0はint型 auto& t1 = x; // t1はint&型 auto&& t2 = x; // t2はint&型(int&&型ではない) au…

main関数returnと他スレッドの関係

C C++

プログラミング言語C/C++言語におけるmain関数returnと他スレッドの関係についてメモ。C11/C++11ともに “メインスレッドのmain関数からのreturn” は標準ライブラリexit関数呼び出しと等価であり、他に実行中スレッドが存在したとしても該当プロセスを終了す…

Relacy Race Detector

C++

C++11メモリモデルに基づく競合検出ツール。BSD-likeライセンス。 Relacy Race DetectorRelacy Race Detector is a tool for efficient execution of unit-tests for synchronization algorithms written in C++0x. Every user thread is represented as a f…

GCC 4.7.0のTransactionalMemoryサポート

GCC 4.7から実験的サポートが始まったTransactional Memory(TM)についてメモ。主に "Draft Specification of Transactional Language Constructs for C++, Version 1.1"*1 で定義される拡張キーワードのsyntaxサポート確認を行った。 TMサポートの有効化 GCC…

C++標準文字列:c_str, data, operator[]

C++

C++標準ライブラリ文字列クラステンプレーstd::basic_stringのメンバ関数c_str, dataおよびoperator[]の仕様ついてメモ。 basic_string の data と c_str の挙動の変更 C++03 では c_str メンバ関数の返す文字列は null 終端されていることが保証されていま…