【问题标题】:Why malloc return value is not in the process memory map?为什么 malloc 返回值不在进程内存映射中?
【发布时间】:2016-07-18 01:57:15
【问题描述】:

我现在使用的是 OS X 10.10.5,我正在做一个关于 malloc 和 heap 的实验,如下所示:

#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工具获取内存映射,结果为:

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


现在修复了,当我使用 %p 而不是 %x 时,输出为 the malloc p pointer addr is 0x7fe131404ba0
vmmap 输出为:

感谢@Alex Lop。

【问题讨论】:

标签: c pointers memory memory-management


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2011-03-30
    • 2017-10-08
    • 2010-09-05
    • 2011-08-06
    • 2014-10-09
    • 2020-04-20
    • 1970-01-01
    • 1970-01-01
    • 2012-09-02
    相关资源
    最近更新 更多