如何在C++的共享内存中存储浮点向量的向量
How do I store a vector of float vectors in shared memory in C++?
我需要在C++的共享内存中存储浮点向量的向量。我有一个可行的玩具示例,用于在共享内存中存储整数。这是代码:
int main()
{
int pid;
int start = 0;
int shmid;
key_t key;
key = 123;
int *shm;
if ((shmid = shmget(key, sizeof(int), IPC_CREAT | 0666)) < 0)
{
perror("shmget");
exit(1);
}
shm = (int *) shmat(shmid, NULL, 0);
pid = fork();
if (pid > 0)
{
wait(NULL);
cout << *shm << *(shm+1);
}
else if (pid == 0)
{
*shm = 6;
*(shm+1) = 7;
}
else
{
exit(-1);
}
cout << endl;
return 0;
}
但是,我的理解是,使用数据类型向量而不是简单的整数要困难得多>这要困难得多。我是否需要编写自定义分配器(如果是这样,是否有任何简单的方法可以做到这一点?我找到的例子都非常复杂...要做到这一点,或者这个例子的一个简单的扩展可以让我在共享内存中放置一个向量>?
不可能将
std::vector<T>
存储在共享内存区域中,因为向量内的实际元素不会存储在std::vector<T>
的内存中,而是在堆上分配。
从技术上讲,您可以构建自己的allocator
,但我认为简单地序列化向量的内容更容易。
像这样:
vector<float> vec_f;
// some code fills vec_f ..
float *shm;
shm = (float *) shmat(shmid, NULL, 0);
for(auto f : vec_f)
{
*shm++ = f;
}
(或者,如果您不想使用C++样式迭代)
for(size_t i = 0; i < vec_f.size(); i++)
{
*shm++ = vec_f[i];
}
相关文章:
- 访问存储在向量C++中的结构的多态成员
- 添加存储在向量中的大整数的函数出现问题
- 在 std::无符号字符的向量处存储 int 的十六进制表示形式
- 如何从用户那里获取输入并将其存储在向量中?
- 如何从文件中读取两个字符串和数字数组,并将它们存储在对象向量中
- 将无符号字符的向量存储在数组中会给我 std::bad_alloc
- 在二维向量或数组中可以存储的最大元素数是多少?
- 存储在堆分配向量中的指针的免费存储
- 将相同共享指针的副本存储在不同的向量中是否是一种好的做法?
- 将数组信息存储到 c++ 向量中有一个"Access violation reading location"
- Sqlite3:将数据库表名存储在向量中
- 如何在数组和向量 c++ 中存储和保存输入
- C++ 将抽象类型的动态分配对象传递给函数并存储在向量中
- 代码将向量存储为向量<vector>,为什么没有错误消息?
- 替代STD ::向量存储参考而不是对象的副本
- 将向量存储在<file> CStringArray 中?
- 将可变大小结构的向量存储在c++中的二进制文件中
- 使用向量c++存储和洗牌一副牌
- 将指针向量存储在文件中并再次读取它们
- 是否可以/建议将向量存储在结构中?C++