[thinking] malloc引發的事件

環境:ubuntu 16,C語言

問題描述:程序中,malloc分配小於128字節可以正常分配,但大於128k的時候,malloc就崩了。

分析:代碼截圖如下:

下面是執行的結果,可以看出第710行是沒跑的,死在了malloc裏面。

經過一段時間的思考和調試,通過man查找到了malloc的用法,仔細閱讀才發現問題所在,man的說明如下,有興趣的可以自己查看man手冊:

其中明顯的指出,默認最大上限是128k,一語驚醒,找到問題的所在了。後面也說明了可以通過mallopt()函數修改。

 

後面代碼做了調整,通過了mallopt函數的M_MMAP_THRESHOLD參數進行調整:

編譯跑後,完美運行。

 

/**********************************************  end ******************************************************/

思考:

1.glibc的版本不一樣,malloc的方式會不會不一樣?

2.內存分配的原理是什麼?

3.brk和mmap的方式有什麼區別?

4.可不可以換一種方式替換malloc?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章