关于虚拟内存

C语言 码拜 7年前 (2017-04-15) 1004次浏览
假如内存不够用,操作系统会把内存转到虚拟内存
那么对于一个程序:
1、是不是只有堆上申请的内存会被转移到虚拟内存,而栈上的不会
2、怎么让本人程序申请的内存禁止被转移到虚拟内存
解决方案

5

对于系统而言程序的栈没有特别意义,它也是从全局的堆上分配的
实际上你的程序根本不能直接访问物理内存,都是通过内存分页之类的系统访问的,否则一旦出现内存访问错误,整个系统都会崩溃
每个进程的内存地址都是虚拟的

10

全部应用程序的内存和大部分操作系统内存都是可交换的,可以看一下任务管理器,即便内存使用几GB,未分页内存只有几十MB到一两百MB(依据系统的不同)。
要分配非分页内存可以使用ntoskrnl.exe中的MmAllocateNonCachedMemory

10

引用:

假如内存不够用,操作系统会把内存转到虚拟内存
那么对于一个程序:
1、是不是只有堆上申请的内存会被转移到虚拟内存,而栈上的不会
2、怎么让本人程序申请的内存禁止被转移到虚拟内存

在现代操作系统上,你全部的内存都是虚拟的。
你所谓的“虚拟”,是不是指在硬盘上而不是物理内存中的?
这个程序员一般无法控制。频繁访问的就会一直在屋里内存里。栈用的比较多,所以可能换出去的机会少。但是一样是可以换出去的。

5

栈相对效率高的原因很容易知道啊,原因是它已经分配了,而堆内存使用时才分配
考虑让内存无法移动是没有意义的,应用层程序就应该只做应用层的事情,假如你要做内核的东西,在这里找不到多少帮助的

20

1、栈效率高的其中一个原因是很多指令是针对于栈专门设置的
2、应用层的程序不应该考虑申请这种内存

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明关于虚拟内存
喜欢 (0)
[1034331897@qq.com]
分享 (0)