我是靠谱客的博主 神勇花卷,最近开发中收集的这篇文章主要介绍linux下的malloc申请的是虚拟还是物理的,关于malloc申请内存,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

自学笔记(一)

个人理解

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申请内存所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(46)

评论列表共有 0 条评论

立即
投稿
返回
顶部