为什么malloc返回值不在进程内存映射中?
我现在正在使用OS X 10.10.5,我正在做一个关于malloc和heap的实验,如下所示:为什么malloc返回值不在进程内存映射中?,c,pointers,memory,memory-management,C,Pointers,Memory,Memory Management,我现在正在使用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(); } #包括 #包括 int
#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();
}
#包括
#包括
int main(){
int*p;
p=malloc(sizeof(int));
*p=100;
printf(“malloc p指针地址是%x\n”,p);
getchar();
}
输出为malloc p指针地址为c3404ba0
我认为地址
0xc3404ba0
是由maclloc作为进程堆的一部分分配的
然后我使用vmmap
工具获取内存映射,结果是:我们可以看到
0xc3404ba0
不在堆区域中,但它实际上是指向已分配内存的指针。怎么了
它现在修复了,当我使用%p而不是%x时,输出是
malloc p pointer addr是0x7fe131404ba0
vmmap输出为:
感谢@Alex Lop.正如我在评论中所写的,看起来您正在64位操作系统上运行。如果您的程序是在64位模式下编译的,那么使用
%x
打印指针将切断较高的32位(因为%x
用于整数)。用%p
试试同样的方法,然后发布结果
我猜0xxxxxxxxc3404ba0
属于该范围:
正如我在评论中所写,看起来您运行的是64位操作系统。如果您的程序是在64位模式下编译的,那么使用
%x
打印指针将切断较高的32位(因为%x
用于整数)。用%p
试试同样的方法,然后发布结果
我猜0xxxxxxxxc3404ba0
属于该范围:
看起来您正在64位操作系统上运行。如果您的程序是在64位模式下编译的,那么使用
%x
打印指针将切断较高的32位。请改为对%p
执行相同的操作,并发布结果。使用错误的格式说明符调用未定义的行为看起来像是在64位操作系统上运行。如果您的程序是在64位模式下编译的,那么使用%x
打印指针将切断较高的32位。请改为对%p
执行相同操作,并发布结果。使用错误的格式说明符会调用未定义的行为