yohhoyの日記

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

Linux

参照型変数とメモリの関係

プログラミング言語C++の言語仕様では、メモリ空間上に 参照型(reference type) の実体が存在するか否かを規定しない(unspecified)。 スカラ型(scalar type)=算術型/列挙型/ポインタ型やその配列型などのオブジェクト(object)は、メモリ空間上に実体が配…

readdir/readdir_r関数のあれこれ

POSIX環境にて提供されるreaddir, readdir_r関数に関するメモ。まとめ: 事実上スレッドセーフが保証されるreaddir関数を使うこと。将来のPOSIX規格でスレッドセーフ保証が追加予定。 readdir_r関数を利用してはならない。POSIXからも廃止予定であり、GLIBC …

scanf文字列取得と動的メモリ確保

C標準ライブラリscanf関数の書式指定%sにおいて、取得先の文字列バッファを動的確保する機能拡張。 // POSIX準拠システム char *s = NULL; scanf("%ms", &s); // sはmallocで確保される ... free(s); まとめ: 標準C(ISO C):該当機能は存在しない。メモリ領…

Linuxとビット幅指定整数型

C99標準ヘッダ<stdint.h>で定義されるビット幅指定の整数型と、Linux Standard Base(LSB)によるプロセッサ・アーキテクチャ別の規定。x86(IA-32)とx86-64/AMD64における整数型ビット幅は下表の通り(太字はアーキテクチャでビット幅が異なる整数型)。 型名 IA-32 AMD6</stdint.h>…

synchronic同期プリミティブ

C++1z(C++17)に向けて提案されている同期プリミティブについてメモ。(PDF)N4195 std::synchronic<T> に基づく。初期提案のため概要のみ。2019-09-12追記:C++2a(C++20)に向けて提案文書 P1135R6 が採択され、atomic変数std::atomic<T>に wait / notify_one / notif</t></t>…

Boost.Thread 1.50.0 condition_variableタイムアウト付き待機処理の問題

Boost.Threadライブラリ 1.50.0の条件変数(boost::condition_variable)では誤った対処(#6130)が行われており、condition_variableオブジェクトのタイムアウト付き待機関数において常に余計なタイムアウト時間が長くとられる。Linux/Mac OS XシステムかつB…

条件変数とダンス(Two-Step Dance)を

条件変数(condition variable)同期プリミティブに対する待機/通知で発生する現象と回避策のメモ。条件変数とミューテックスを使ったコードにおいて次のような現象が生じる。 スレッドAが条件変数cvに対して通知を行う。 条件変数cvに対してブロックされてい…