所以我今天打電話給malloc(1024)只是玩堆。我大部分理解堆的結構,所以當我打印出內存中的內容時,我並不感到驚訝,看到「00000000 00000409 00000000 00000000 ....」我的堆上有什麼? C linux
然而,1032字節後,我預期找到堆的最上面的塊。相反,我發現另一個塊,就好像malloc(1024)的另一個調用發生在我的第一個塊之後。
在此塊如下:
00000000 00000409 30387830 65336234
30203a30 30303030 20303030 30303030
30303030 30303020 30303030 30302030
34303030 33203930 33303330 20303330
30333033 30333032 33343320 33303330
33332030 39333032 000a3233 00000000
翻譯爲:
08x0e3b40 :00000 00000000000000 000000 040003 903030 03003030302343 303033#09302
23
有誰知道爲什麼會存在?我確信我只是一次調用malloc。無論我的malloc大小如何,它總是似乎在那裏。
因爲在你的機器上還有其他的事情發生?你還期望在那裏? (例如:什麼是*「堆的頂部塊」*?) – UnholySheep
你沒有任何機會打印包含一堆零的字符串打印? ASCII 30303030? – stark
'brk'中的移動量(數據段大小的改變)取決於分配器。它可能比你在'malloc'調用中實際請求的更多。所以,你的數據不一定在堆的頂部。 – Arash