我尝试了以下测试,以查看程序执行时是否将.data节加载到内存中:
global _start
section .data
arr times 99999999 DB 0xAF
section .text
_start:
jmp _start ; prevent process from terminating
组装并链接:
nasm -f win32 D:\file.asm
link D:\file.obj /OUT:D:\file.exe /ENTRY:start /SUBSYSTEM:CONSOLE
我已经执行了该程序,结果如下:
如您所见,该程序的数组大小为99999999字节,仅占用了276 KB的内存!
最佳答案
大多数系统上的页面调度模型将导致组成二进制文件各部分的页面仅在访问它们时才需要加载某些类型的动态链接-Windows也不异常(exception)。因此,.data节作为二进制文件在内存中映射到您的进程内存空间,但实际上直到需要时才被交换。尽管您可以配置列以显示镜像中的所有内存,但进程监视器仅默认情况下实际报告内存。可能还有一些编译器选项可用于更改分页行为,并且始终可以根据需要手动重新映射内存(也许将其锁定)。