【发布时间】:2017-09-17 17:11:30
【问题描述】:
所以我今天调用了 malloc(1024) 来处理堆。我在很大程度上了解堆的结构,所以当我打印出内存中的内容时,看到“00000000 00000409 00000000 00000000 ....”并不感到惊讶。
然而 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 的大小如何,它似乎总是在那里。
【问题讨论】:
-
因为您的机器上还有其他事情发生?还有你期望在那里? (例如:什么是“堆的顶部”?)
-
您没有使用包含一堆零的字符串调用 print 吗? ASCII 30303030?
-
brk中的移动量(数据段大小的变化)取决于分配器。它可能比您在malloc通话中实际要求的移动更多。因此,您的数据不一定在堆的顶部。 -
是否多次运行您的程序,在其间运行其他程序,或者在其间重新启动,显示相同的结果?
标签: c linux heap-memory