2010-07-29 72 views
2

以下是官方的BOOST文檔。 爲什麼在撥打region.get_size()時總是得到零大小?我究竟做錯了什麼?C++ BOOST:windows共享內存get_size()返回零

int main(int argc, char *argv[]) 
{ 

    //Create a native windows shared memory object. 
    windows_shared_memory shm (create_only, "MySharedMemory", read_write, 1000); 

    //Map the whole shared memory in this process 
    mapped_region region(shm, read_write); 
    cout << "SIZE IS " << region.get_size() << endl; 

return 0; 
} 

回答

3

我想我得到了答案: 從升壓文檔:

本地Windows共享內存也 另一個限制:一個進程可以打開 並映射整個共享內存 由另一個進程創建但它不能知道哪個是 內存的大小。此限制是由Windows API的 強加的,因此用戶必須以 以某種方式將 段的大小傳輸到打開 段的進程。

1

boost::interprocess documentation爲你使用它的mapped_region構造說:

創建映射 記憶「映射」的映射區域,開始偏移 「偏移」,和映射的大小將 是「大小」。映射可以爲只讀「READ_ONLY」或 讀寫「READ_WRITE打開

所以提供一個非零大小,一切都將如預期。 mapped_region region(shm, read_write, 0, 1000);

+0

不是根據文檔。不應該在窗口中調用帶有大小的mapped_region。看到我上面的答案 – GabiMe 2010-07-29 21:00:59