2010-07-29 97 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