我有以下结构:
struct outData{
int a;
float lat, lon;
}
通过共享内存用于IPC。现在我想更新它看起来像这样:
struct outData{
int a;
std::vector<std::pair<std::string, int>> allInts;
std::vector<std::pair<std::string, float>> allfloats;
}
为了方便起见,我的共享内存为 4096 字节,因此我不必每次更改结构时都修改 sizeof(outData) 行代码。
当我用动态成员创建这样的结构时,是否保证它们都是在 (int a) 之后创建的,因此在共享内存中?
向量的向量怎么样?
struct outData{
int a;
std::vector<std::pair<std::string, int>> allInts;
std::vector<std::pair<std::string, float>> allfloats;
std::vector<std::pair<std::string, std::vector<byte>>> allByteMessages;
}
哇,感谢您的快速回答!根据您的输入,我制定了此解决方案:
struct outData{
int *iarray;
float *farray;
} gtempStruct;
SetSharedMem(std::vector<std::pair<int, float>> &input)
{
void * p_v;
gtempStruct.iarray = new int[input.size()];
gtempStruct.farray = new float[input.size()];
fillStruct(input);
outData *p_oD = (outData *) p_Shm; // p_Shm = pointer to shared memory start
*p_oD = gtempStruct;
p_v = p_oD;
p_v = reinterpret_cast<char*>(p_v) + sizeof(outData) -1;
p_v = reinterpret_cast<void*>(p_v);
memcpy(p_v, gtempStruct.iarray, sizeof(int)*input.size())
p_oD->iarray = (int*) p_v;
.
.
.
}
这行得通,但它没有经过彻底的测试。谢谢!