2010-12-12 86 views
3

現在在我的系統(debianx64)上,頁面大小爲4096字節。有沒有可能減少它?我想在內存中存儲很多小塊,但即使保留1個字節,我也不能使用另一個4095,因爲此處添加了第1條消息中的內容。 這是真的還是我錯了? 可以做到嗎? Thx爲答覆。C++從4096字節減少內存頁面大小

+1

重複http://stackoverflow.com/questions/4420891/c-new-how-how-is-it-allocating-memory。 – Nate 2010-12-12 18:12:41

回答

10

編號

4096是x86平臺提供的最小頁面大小。這是CPU所施加的限制。它提供更大的尺寸(高達4MB,取決於模式),但這通常在啓動時由操作系統選擇。

可以做的是做一個相對較大的分配作爲object pool的後備存儲。那麼如果你需要很多小對象,它們都可以存儲在一個頁面或內存區域中。這是改善內存分配性能的常見習慣用法。此外,大多數理智的內存分配器無論如何都以這種方式工作,所以沒有必要實現一個對象池,除非您在分析中發現您需要它。

1

頁面大小是OS範圍的項目。您不能僅爲您的應用程序創建新頁面大小,因爲頁面錯誤邏輯必須與所有其他進程一起使用。

我不確定你正在嘗試做什麼。我會說,如果你甚至擔心這個問題,那麼你需要通過連續存儲和訪問內存來使你的軟件更加緩存友好,就像在一個數組中一樣。

1

頁面大小(在x86平臺上BTW不能低於4K)很可能與您的情況無關。如果您在堆上分配數據,則頁面大小問題不會以您所假設的方式出現。