虚拟内存和物理内存

概念

物理内存就是指内存条,虚拟内存是逻辑概念。每个进程都有自己独立的虚拟地址空间,32位有4G大小,64位有256T大小。一个进程同一时刻不可能所有变量数据都会访问到,只需要在访问某部分数据时,把这一块虚拟内存映射到物理内存,其他没有实际访问过的虚拟地址空间并不会占用到物理内存,这样对物理内存的消耗就大大减少了 。

虚拟内存划分

32位系统

64位系统

从虚拟地址的角度来看,内存空间如下划分:

  1. 32位系统最高的1G空间保留给内核使用,多个进程共享;64位系统最高的128T空间保留给内核使用并且不被进程共享。
  2. 栈,栈向低地址方向延伸,用于存放局部变量和进程上下文。栈是一块连续的内存的区域,用来记录函数调用过程中的栈帧,在函数调用时栈的参数由右往左入栈,然后是返回地址、函数中的局部变量。(静态变量存储在静态存储区,所以不入栈)当函数调用结束后,按照栈后进先出的顺序退栈,栈顶指针指向最开始存的地址,程序由该点继续运行。
  3. MMAP区(文件映射内存,如动态库等),当malloc/free申请释放内存大于128K时(且堆内部的内存不能满足malloc调用),通过mmap系统调用分配一块虚拟地址空间;32位系统向低地址扩展,64位向高地址扩展。
  4. 堆,堆向高地址方向延伸,当malloc/free申请释放内存小于128K时(且堆内部的内存不能满足malloc调用),通过brk/sbrk系统调用,控制堆顶指针向高地址偏移(malloc)或者低地址偏移(free);操作系统是用链表来存储的空闲内存地址的,所以堆的内存是不连续的。
    参考
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值