環境: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?