C语言中malloc分配内存后输出的ptr数值代表什么?
问题
在C程序中有如下语句,其中*size为字节数。*size的由来是:size是Fortran 77代码传入C函数的参数,Fortran传递的是size的内存地址,*size是其存储的字节数值(*size = 1138280)。
ptr = malloc(*size); printf("ptr= %ld,", ptr);
打印结果为ptr = 46912496308240,请问该数值代表什么?
回答
这个数值是malloc成功分配的内存块的起始虚拟内存地址的十进制表示。
malloc返回的ptr是指针类型,指针的本质就是存储内存单元的地址值,这里用%ld(长整型格式符)将该地址值以十进制整数形式打印了出来。- 注意:标准C中打印指针应使用
%p格式符,它会以系统默认格式(通常为十六进制)输出地址,用%ld属于不规范用法,在不同位数的系统上可能出现截断或显示异常。 - 该地址属于进程的虚拟地址空间,是操作系统为当前进程分配的虚拟内存位置,并非直接对应物理内存地址,操作系统会通过内存管理单元(MMU)完成虚拟地址到物理地址的映射。
内容的提问来源于stack exchange,提问作者Surya Sarvajith
相关产品推荐
相关产品推荐

