8.8 程序加载时会生成栈和堆
EXE文件内容包括再配置信息、变量组和函数组,程序加载到内存后还会额外生成栈和堆。栈用于存储函数内部临时变量(局部变量)和函数调用参数,堆用于存储程序运行时的任意数据及对象。
EXE文件本身不存在栈和堆,其所需内存空间在文件加载到内存开始运行时分配。内存中的程序由用于变量、函数、栈和堆的内存空间4部分构成(操作系统占用内存空间另算)。
栈和堆的内存空间在程序运行时申请分配,二者内存使用方法有差异。栈的存储和清理代码由编译器自动生成,函数调用时申请内存,处理完自动释放;堆的内存空间需程序员编写程序明确申请分配或释放。
不同编程语言申请和释放堆内存空间的方法不同,如C语言用malloc()函数申请、free()函数释放,C++用new运算符申请、delete运算符释放。若未在程序中明确释放堆内存空间,会导致内存泄露,可能造成内存不足和宕机。

浙公网安备 33010602011771号