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

标签 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();
}

输出是malloc p指针地址是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。

最佳答案

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

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

enter image description here

关于c - 为什么 malloc 返回值不在进程内存映射中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36302476/

上一篇:C 简单链表

下一篇:c - 减去十六进制

相关文章:

C - 如何从/dev/urandom读取数据到uint64_t变量中?

c - 使用 malloc 的指针数组 : The code runs into a segmentation fault. 救命!谢谢

c - 为什么类型标识符后跟函数调用?

c++ - 我从 g++ 编译器收到此错误 - 从 ‘int*’ 到 ‘int’ 的无效转换 [-fpermissive]

c++ - 为具有内存限制的大 XML 优化的 XML 库

android - 数据库引用还是娱乐?

C 打印通用类型 vector

c++ - 复制 float 的字节模式不起作用

c - 是否有在 C 中分配内存的最佳实践?

android - 如何访问类加载器/App Linearalloc 类信息大小?