了解堆内存结构

时间:2014-07-06 06:58:27

标签: malloc

我目前正在学习堆利用和溢出。但目前我遇到了一些问题。 当我尝试使用gdb检查堆内存时,我正在使用glibc v2.19。

以下是我正在使用的代码。

    char *p;
    p = malloc(20);
    strcpy(p,"AAAAAAAA");
    free(p);

这是分配的chunck的gdb输出。

(gdb) x/4xw 0x0804b008-8
0x804b000:  0x00000000  0x00000019  0x41414141  0x41414141

这是未分配的chunck的gdb输出。

(gdb) x/4xw 0x0804b008-8
0x804b000:  0x00000000  0x00000019  0x00000000  0x41414141

我可以看到大小字段在重新分配后没有改变,所以这可能是怎么样以及分配器如何知道这是一个免费的chunck?因为据我所知,大小的前3位用作状态标志。

为什么下一个指针" 0x0000000"是不是指向任何地方?

为什么指向prevoius chunck" 0x41414141"没用过?

在这种情况下,分配器如何寻找免费的chuncks?

我也试图释放两个连续的chuncks,在我释放第二个之后,prevoius大小字段应该被用作prevoius免费块的大小也不会被使用它只是零。

0 个答案:

没有答案