我正在寻找通过boost::interprocess
的managed_shared_memory
创建静态块共享内存应分配多少内存的权威答案(如果确实存在)。即使official examples似乎分配了arbitrarily large大块的内存。'managed_shared_memory'应该分配多少内存? (boost)
考虑以下结构:
// 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
添加更多字段时会分崩离析。那么,这是一个糟糕的黑客攻击。
有些人可能会争辩说,现代个人电脑中的“记忆便宜”,但我不同意这种理念,并且如果我可以避免的话,不喜欢分配比我需要的更多。我昨天在Boost文档中搜索,找不到任何建议。这是今天学习新事物!
人们可能会不同意我这里,但我从来没有在我的生活编码沿着“记忆便宜”的线。与过去的购买方式相比,购买内存不一定很昂贵,但它非常像金钱。你拥有的越多,花费越多。我为我的电脑购买的每一次内存升级,现在我可以“跑得更多”了。我一直试图在这方面进行保守编码,因为它对我的应用程序来说不一定便宜*。无论如何,只是我的2c :) – 2010-11-12 16:28:30
我同意100%!这就是我正在问这个问题的**整个**原因。我只是在那里发表这个评论,劝阻任何人说“谁在乎,只分配1k并完成它”。我会尽量在帖子中更加清楚。 – 2010-11-12 16:37:08
啊好的:)“有些人可能会争辩”要好得多! – 2010-11-12 16:56:55