假如内存不够用,操作系统会把内存转到虚拟内存
那么对于一个程序:
1、是不是只有堆上申请的内存会被转移到虚拟内存,而栈上的不会
2、怎么让本人程序申请的内存禁止被转移到虚拟内存
那么对于一个程序:
1、是不是只有堆上申请的内存会被转移到虚拟内存,而栈上的不会
2、怎么让本人程序申请的内存禁止被转移到虚拟内存
解决方案
5
对于系统而言程序的栈没有特别意义,它也是从全局的堆上分配的
实际上你的程序根本不能直接访问物理内存,都是通过内存分页之类的系统访问的,否则一旦出现内存访问错误,整个系统都会崩溃
每个进程的内存地址都是虚拟的
实际上你的程序根本不能直接访问物理内存,都是通过内存分页之类的系统访问的,否则一旦出现内存访问错误,整个系统都会崩溃
每个进程的内存地址都是虚拟的
10
全部应用程序的内存和大部分操作系统内存都是可交换的,可以看一下任务管理器,即便内存使用几GB,未分页内存只有几十MB到一两百MB(依据系统的不同)。
要分配非分页内存可以使用ntoskrnl.exe中的MmAllocateNonCachedMemory
要分配非分页内存可以使用ntoskrnl.exe中的MmAllocateNonCachedMemory
10
在现代操作系统上,你全部的内存都是虚拟的。
你所谓的“虚拟”,是不是指在硬盘上而不是物理内存中的?
这个程序员一般无法控制。频繁访问的就会一直在屋里内存里。栈用的比较多,所以可能换出去的机会少。但是一样是可以换出去的。
5
栈相对效率高的原因很容易知道啊,原因是它已经分配了,而堆内存使用时才分配
考虑让内存无法移动是没有意义的,应用层程序就应该只做应用层的事情,假如你要做内核的东西,在这里找不到多少帮助的
考虑让内存无法移动是没有意义的,应用层程序就应该只做应用层的事情,假如你要做内核的东西,在这里找不到多少帮助的
20
1、栈效率高的其中一个原因是很多指令是针对于栈专门设置的
2、应用层的程序不应该考虑申请这种内存
2、应用层的程序不应该考虑申请这种内存