この時、共有する変数は宣言と同時に明示的に初期化しなければ、共有されないので注意すること。
#pragma comment(linker, "/SECTION:.SHAREDMEM,RWS") #pragma data_seg(".SHAREDMEM") int shared_ng; //NG int shared_ok = 0; //OK struct shared_struct shared_struct_ng; //NG struct shared_struct shared_struct_ok ={0}; //OK #pragma data_seg()
初期化していないグローバル変数は自動的に0に初期化されることになっているわけだけど、このためにBSSという専用のセクションが用意されていて、スタートアップルーチンでクリア処理が走る。
そのため、初期化をしていない変数はせっかく用意した共有用のデータセグメントではなく、BSSセクションに置かれてしまい共有できないということらしい。
0 件のコメント:
コメントを投稿