char *ptr = (char*) malloc(40);
printf("%u",ptr);
56737856 (some output)
现在,如果我没有理解错误的话,我们在上面看到的输出不是物理地址,而是虚拟地址。我理解正确吗?
有没有办法看到实际的物理地址?或者反过来(如果我上面的假设是错误的),malloc 的所有内部实现是否必须使用 jemalloc 算法?
在用户空间应用程序中看到的所有地址都是虚拟地址。
物理地址只与内核有关。从虚拟地址到物理地址的映射非常复杂,因为:
除了一些非常不寻常的情况(主要与硬件操作有关),您不应该关心物理地址。
%p
格式说明符打印物理地址吗? - RajSanpui%p
不是魔法。它只是打印出你传递给它的地址,并且该地址将是一个虚拟地址。 - user149341%p
你仍在访问操作系统映射的虚拟地址。 - David Ranierivoid main()
{
unsigned char* ptr;
int i;
ptr = (unsigned char *)0x0;
for(i = 0; i < 1024; i++)
{
ptr[i]=0x0;
}
return;
}
printf("%p", (void *)ptr);
- David Ranieri/proc/self/maps
显示堆在虚拟地址方面的位置,但不显示物理地址。 - aschepler%p
是用于指针实际持有的地址,你的意思是使用%p
我们可以打印物理地址? - RajSanpui