boost::interprocess
我正在寻找一个明确的答案(如果确实存在的话),当通过's创建共享内存的静态块时应该分配多少内存managed_shared_memory
。即使是官方的例子似乎也分配了任意大的内存块。
考虑以下结构:
// Example: simple struct with two 4-byte fields
struct Point2D {
int x, y;
};
我最初的反应是必要的大小是 8 个字节,或者sizeof(Point2D)
. 当我尝试构造一个对象时,这会惨遭失败,在运行时给我段错误。
// BAD: 8 bytes is nowhere near enough memory allocated.
managed_shared_memory segment(create_only, "My shared memory", sizeof(Point2D));
什么读/写操作导致了段错误?堆栈操作?临时分配segment.construct()
? 分配共享内存时需要多少开销?
通过反复试验,我发现将大小乘以 4 可以适用于上述结构,但是当我开始向我的struct
. 所以,这听起来很糟糕。
有些人可能会争辩说现代 PC 中的“内存很便宜”,但我不同意这种理念,并且不喜欢分配比我需要的更多的东西,如果我可以避免的话。我昨天翻遍了 Boost 文档,找不到任何建议。今天来学习新的东西!