所以我今天打电话给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