概述
自学笔记(一)
个人理解
linux内存采用分页的内存管理,而32位pc机还采用了段式内存管理,它的地址关系为:逻辑地址--->虚拟地址(也叫线性地址)--->物理地址。
linux所有段基地址都为0,所以可以看做linux并没有采用段式的内存管理,linux的地址关系:虚拟地址--->物理地址
因为,linux会为每个进程分配独立的进程地址空间(大小为3GB),这里的地址指的是虚拟地址并不是实际意义上的物理地址,通过map映射到对应的物理地址。
malloc()
malloc申请内存返回的是虚拟地址而不是物理地址,而且,返回的这个虚拟地址是没有map映射到物理内存中的,只有当程序(进程)用到访问了这个地址的时候,
内核才响应“缺页异常”,才回去映射一块物理地址。
关于malloc(0) 能申请成功是肯定的,它返回的是虚拟地址(对应的物理地址还不确定的),在你没用到这块地址空间的时候,它不会再物理上开辟内存。
在你用到malloc(0)返回的地址时,因为参数为0,缺页异常不会为你的进程空间申请额外内存。所以这个指针应该是不能用的。
关于虚拟地址
可以把一个程序运行3次,为了保证程序一直运行可以在程序中加10秒的延迟。可以看到这3个进程的使用的地址是一样的(虚拟地址),映射的物理地址肯定不一样的。
最后
以上就是神勇花卷为你收集整理的linux下的malloc申请的是虚拟还是物理的,关于malloc申请内存的全部内容,希望文章能够帮你解决linux下的malloc申请的是虚拟还是物理的,关于malloc申请内存所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复