加载之后,可执行程序看起来占据了一个连续的内存块,这个连续的内存块被称为程序映像(program image).
低地址
--------------------------
| 程序文本 | 0x00aa
--------------------------
| 已初始化的静态数据 | 0x00bb
--------------------------
| 未初始化的静态数据 | 0x00cc
--------------------------
| 堆 | 0x00dd
--------------------------
| 栈 | 0x00ee
--------------------------
|命令行参数和环境变量 | 0x00ff
---------------------- ---
高地址
堆: 用malloc函数族分配的内存 (在堆上分配的存储空间一直存在,直到它被释放free或程序退出。如果一个函数调用了malloc,那么在这个函数返回时,如果存储空间未被free,则空间仍保持已分配状态,除非程序有一个在函数返回之后仍然可以访问的、指向此存储空间的指针,否则,返回后的程序就不能访问它)
栈: 函数调用的记录(返回地址、参数、已保存的寄存器、自动变量),函数调用时创建一个新的记录,返回时从栈中删除记录
在声明时,
没有显示初始化的静态变量,在运行时被初始化为0。
(栈变量)动态变量,即在未初始化时,值在运行时是不确定的 静态变量是非线程,因此除非是在受控的情况下,否则应尽量避免使用静态变量。