应该'managed_shared_memory'分配多少内存? (助推)
我正在寻找一个确定的答案(如果确实存在的话),在通过
boost::interprocess
的managed_shared_memory
创建静态的共享内存块时应该分配多少内存。即使是官方的例子似乎也会分配任意大块的内存。
考虑以下结构:
// Example: simple struct with two 4-byte fields
struct Point2D {
int x, y;
};
我最初的反应是必要的大小是8字节,或sizeof(Point2D)
。当我尝试构造一个对象时,这会失败,在运行时给出了seg-fault。
// BAD: 8 bytes is nowhere near enough memory allocated.
managed_shared_memory segment(create_only, "My shared memory", sizeof(Point2D));
什么读/写操作导致seg-faults?堆栈操作?暂时分配segment.construct()
?分配共享内存时需要多少开销?
通过反复试验,我发现将大小乘以4可以适用于上述结构,但是当我开始向我的struct
添加更多字段时会崩溃。所以,这是一个糟糕的黑客。
有些人可能会认为现代PC中的“记忆力很便宜”,但我不同意这种理念,如果我能避免,就不喜欢分配超出我需要的东西。我昨天在Boost文档中挖了一遍,找不到任何建议。这是今天要学习新东西的!
没有找到相关结果
已邀请:
2 个回复
物崎巩
该库在段的开头有一个额外的内存开销,因此占用了所请求大小的几个字节。根据这篇文章和这篇文章,无法确定这个确切的附加字节数: 你无法计算它,因为那里 是内存分配bookeeping和 变化的碎片问题 运行时取决于你的 分配/解除分配模式。和 共享内存由页面分配 通过操作系统(Linux on 64k上的4K) windows),所以任何分配都会 在实践中分配四舍五入到 页:
会浪费同样的记忆:
炉挤仙挟
使用boost :: managed_shared_memory可以在结果空间中构造对象。就像是....