我有一个简单的要求可能很难解决.我确实找到了一些像这样或者这样的引线,但我似乎无法自述使用它们.前者甚至没有为我翻译成可构建的代码.我对Boost没有经验只是自己写这个,但在我看来这可能是一个常见的要求.
我也遇到过Interprocess STL Map,但我还没有把它组装成工作代码.
我想boost::interprocess是去的地方,除非我想从头开始创建一些共享内存映射.
我不关心便携性.我需要一个适用于MS编译器的解决方案,特别是VS 2010附带的解决方案.
这张海报似乎想要或多或少地想要做什么,除了我需要将GUID映射到任意长度的二进制缓冲区(但是int到字符串同样好作为起点).不幸的是,即使从实验开始,我也无法干净地编译代码.
此外,我有两个问题:A)是否可以自动(或至少可预测)增加/缩小共享内存以满足分配需求; B)假设一个进程创建映射,另一个进程如何"附加"它?
我不介意解决方案是否需要多个共享"段"以满足分配需求.它不一定必须是单个单片共享内存块.
任何帮助都非常感谢.
我试图共享一个无序的映射(哈希映射),但它最终在它试图在地图中插入数据的行处的浮点异常结束.
有人可以帮助理解我哪里出错吗?
#include <iostream>
#include <string>
#include <unordered_map>
#include <sys/ipc.h>
#include <sys/shm.h>
int main ()
{
std::unordered_map<std::string,double> *tmp;
key_t key = 5678;
int shmid = shmget(key, 1000, IPC_CREAT | IPC_EXCL | 644);
if(shmid == -1){
std::cerr << "Failed to create the shared segment." << std::endl;
exit(-1);
}
void *addr = shmat(shmid, NULL, 0);
if(addr == (void*)-1){
std::cerr << "Failed to attach the segment to the process." << std::endl;
exit(-1);
}
tmp = static_cast< std::unordered_map<std::string,double>* >(addr);
tmp->insert (std::pair<std::string,double>("abc",1.2));
shmdt(addr);
return 0; …Run Code Online (Sandbox Code Playgroud)