我正在尋找通過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