解析作業系統的記憶體配置(malloc)對齊策略

來源:互聯網
上載者:User

問題:

我們在寫程式的時候經常發現程式使用的記憶體往往比我們申請的多,為了最佳化程式的記憶體佔用,攪盡腦汁想要最佳化記憶體佔用,可是發現自己的代碼也無從最佳化了,怎麼辦?現在我們把我們的焦點放到malloc上,畢竟我們向系統申請的記憶體都是通過它完成了,不瞭解他,也就不能徹底的最佳化記憶體佔用。

來個小例子

//g++ -o malloc_addr_vec  mallc_addr_vec.cpp 編譯  #include<iostream>  using namespace std;  int main(int argc, char *argv[])  {      int malloc_size = atoi(argv[1]);      char * malloc_char;      for (size_t i = 0; i < 1024*1024; ++i) {          malloc_char = new char[malloc_size];      }      while (1) {}//此時查看記憶體佔用      return 0;  }

本文的測試環境為Linux 64Bit ,使用G++編譯為可執行檔後,使用不同的啟動參數啟動,使用top命令查看程式佔用的記憶體,這裡我們主要是看RES指標

RES  --  Resident size (kb)

The non-swapped physical memory a task has used.

測試案例:

1.每次new 1 Byte   Do 1024*1024次

./malloc_addr_vec 1

啟動程式後的記憶體佔用

記憶體消耗 32MB

2.每次new 24 Byte  Do 1024*1024次

./malloc_addr_vec 24

啟動程式後的記憶體佔用

記憶體消耗32MB

3.每次new 25 Byte   Do 1024*1024次

./malloc_addr_vec 25

啟動程式後的記憶體佔用

記憶體消耗48MB

為什麼我們每次new 1Byte 和每次 new 24Byte系統消耗的記憶體一樣呢?,為什麼每次new 25Byte和 每次new 24Byte佔用的記憶體完全不同呢?

不知道大家在寫程式的時候有沒有關注過這個問題。我一次遇到時,吐槽一句:What the fuck malloc.

相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。