我一直在尋找減少應用程序的內存佔用。繼上一個問題之後:GDB - can I find large data elements in memory我找到並刪除了大部分最大的罪魁禍首。何時分配靜態數據(.bss)?
nm --size-sort
對於找到可執行文件的.bss部分中的大項目非常寶貴。
在pmap中查看的內存佔用大幅下降。但是,在另一個系統(Ubuntu Pangolin,gcc 4.6.3)上繼續這項工作時,我注意到正在運行的進程的內存佔用是完全合理的,而且肯定比.bss的大小要小得多。
通過調試器運行代碼,它看起來像.bss部分中的最大符號在數據訪問之前並不真正分配(即,我可以從其中一個大符號中設置數組 )內存佔用量增長16MB)。
.bss段只是零初始化的,所以很容易想象一個實現爲它分配虛擬地址空間,但實際上並沒有分配任何實際的內存直到它被使用。
這是一個真正的行爲差異,還是系統間報告的差異?
這聽起來很合理。我不認爲你知道這會持續多久?我看到顯示巨大內存佔用的系統是2007年代(SLES 10.1)。 – asc99c 2012-07-25 12:20:59
Linux已經很長時間處理了這樣的零頁面。共享的ZERO_PAGE存在於Linux 2.4中,正如頁面錯誤處理程序中的寫入時複製支持一樣。 – ncultra 2012-07-25 15:13:28