この時、共有する変数は宣言と同時に明示的に初期化しなければ、共有されないので注意すること。
#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 件のコメント:
コメントを投稿