为什么malloc返回值不在进程内存映射中?

时间:2016-03-30 07:37:04

标签: c pointers memory memory-management

我现在正在使用OS X 10.10.5,我正在进行有关malloc和堆的实验,如下所示:

#include <stdio.h>
#include <stdlib.h>

int main() {
    int *p;
    p = malloc(sizeof(int));
    *p = 100;
    printf("the malloc p pointer addr is %x\n", p);
    getchar();
}

输出为the malloc p pointer addr is c3404ba0;
我认为地址0xc3404ba0由maclloc分配为进程堆的一部分。

然后我使用vmmap工具获取内存映射,结果是:
enter image description here

我们可以看到0xc3404ba0不在堆区域中,但它确实是指向已分配内存的指针。这有什么问题?

现在修复,当我使用%p而不是%x时,输出为the malloc p pointer addr is 0x7fe131404ba0
并且vmmap输出是:
enter image description here
感谢@Alex Lop。

1 个答案:

答案 0 :(得分:4)

正如我在评论中所写,看起来你在64位操作系统上运行。如果您的程序是在64位模式下编译的,那么使用%x打印指针将切断高32位(因为%x用于整数)。请尝试使用%p,然后发布结果。

我的猜测是0xXXXXXXXXc3404ba0属于该范围:

enter image description here