stl ベクトルは SYS V 共有メモリではうまく機能しないことを読みました。しかし、POSIX shm_open を使用してから NULL (mmap(NULL, LARGE_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0)) で mmap を使用し、ベクトルを含むオブジェクトよりもはるかに大きなサイズを指定し、マッピング後に追加のアイテムを追加すると、ベクトル、LARGE_SIZE スペースを超える以外に問題はありますか? その他の関連する質問: 最近の SUSE Linux では、関連のないプロセスで (上記の構文を使用して) 同じ開始アドレスにマップされた場合、オブジェクトが直接マップされ、プロセスで変更された値を実現するために (システム) コピーは実行されません (通常のオープン ファイルと通常のファイルを mmap したときに何が起こるかなど)? ありがとう!
編集:これは正しいですか?:
void* mem = allocate_memory_with_mmap(); // say from a shared region
MyType* ptr = new ( mem ) MyType( args );
ptr.~MyType() //is this really needed?
現在、無関係なプロセスにあります:
MyType* myptr = (MyType*)fetch_address_from_mmap(...)
myptr->printHelloWorld();
myptr->myvalue = 1; //writes to shared memory
myptr.~MyType() //is this really needed?
メモリを解放したい場合
munmap(address...) //but this done only once, when none of the processes use it any more