虚拟内存管理

定义
虚拟内存是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。
我的理解
进程实例在用户态并不直接操作物理内存地址,实际物理内存是可能是零散的,用户管理起来绝对要疯,所以,用户可见的实际上是一段连续的虚拟地址空间。
并且,虚拟内存遵循用到时才申请的原则,不会说你开辟了G级空间,就需要分配G级物理内存。

int main()
{
    char* test = (char*)malloc((unsigned long long)64*1024*1024*1024) ;
    test[0] = '1';
    cout<<test[0]<<endl;
    return 0;
}

在这里插入图片描述
可以看到实际使用的物理内存才1092个字节

虚拟内存段式管理
下图是进程实例中各段内存布局。
在这里插入图片描述
这张图其实还少了一部分,就是地址随机化

配置在 /proc/sys/kernel/randomize_va_space
0:不开启ASLR
1:运行栈和共享库以及部分堆的随机化
2:在1的基础上包括所有堆的随机化
开启klaslr后,.text/.rodata/.init/.data/.bss这些段相对于基地址都加上了一个offset

虚拟内存页式管理
一般一页4K,由内存管理部件MMU负责统一管理。
有几点需要注意
1 进程开辟的虚拟内存并不全部加载进来,就像课本一样,用到哪一页就加载哪一页。
2 当发现需要用到的页不在内存时,会触发缺页中断,执行加载
3 当发现物理内存不够用时,会触发页面置换,通过一些算法,淘汰一个页进入swap,然后加载需要的页。
可参考:https://blog.csdn.net/weixin_44682507/article/details/103587653

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值