程序是怎么跑起来的
程序加载与内存节约
程序如何运行
程序文件存储在硬盘中;执行时先进入内存,CPU 从内存中读取指令和数据来完成取指、译码、执行。
资料:ELF 手册页
如何将程序从磁盘加载进内存
对于 C 程序,编译后可得到一个 .out 文件,该文件在 Linux 中是按照 ELF 规范生成的。
程序加载器会读取 ELF 标准的文件,解析 Program Headers,操作系统为该程序分配虚拟地址空间。
分配虚拟地址空间,不代表程序被完整地加载进内存。当第一次访问某页时,如果该页不在物理内存中,CPU 会触发缺页异常,内核进行处理:检测访问合法性、从磁盘读取或复用缓存等,更新页表,并重新执行指令。
(这里需要看 x86 的实现)
节约内存的方式
通过 DLL 文件共享函数,程序运行时动态链接该文件,多个程序可以同时共用一个 DLL 文件,从而只开辟一块内存空间,节约内存用量。
通过 stdcall 将清理栈的工作交给被调用方,从而减少调用方编译后产生的重复清理指令。