gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 06:20:24 25 4
gpt4 key购买 nike

我现在使用的是 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com