【发布时间】:2011-05-09 04:11:22
【问题描述】:
我正在寻找一个明确的答案(如果确实存在的话),通过boost::interprocess 的managed_shared_memory 创建共享内存的静态块时应该分配多少内存。甚至official examples 似乎也分配了arbitrarily large 内存块。
考虑以下结构:
// 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 文档,找不到任何建议。今天要学点新东西!
【问题讨论】:
-
人们可能不同意我的观点,但我一生中从未按照“内存很便宜”的方式编写代码。购买内存不一定比以前贵,但很像钱。你拥有的越多,你花费的就越多。我为我的电脑购买的每一次内存升级,我都已经很快达到极限,因为我可以“运行更多的东西”。在这方面,我一直尝试保守地编写代码,因为 对于我的应用程序来说并不一定便宜。无论如何,只是我的 2c :)
-
我同意 100%!这就是我提出这个问题的全部原因。我只是把那个评论放在那里以劝阻任何人说“谁在乎,只需分配 1k 并完成它。”我会尽量在帖子中说得更清楚。
-
啊,好吧 :) “有些人可能会争论”要好得多!
标签: c++ boost shared-memory interprocess multiprocess