我读过 stl 向量不适用于 SYS V 共享内存。但是,如果我使用 POSIX shm_open 然后使用 NULL 的 mmap (mmap(NULL, LARGE_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0) 并给出比包含我的向量的对象大得多的大小,并且在映射后添加附加项目到向量,除了超过 LARGE_SIZE 空间之外还有其他问题吗?其他相关问题:在最近的 SUSE linux 上是否保证在不相关的进程中映射到相同的起始地址(使用上述语法)时,我的对象将被直接映射并且不执行(系统)复制以实现进程中的更改值(例如在 mmap-ed 时正常打开和正常文件会发生什么情况)?谢谢!
编辑:这是正确的吗?
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