程序映像的布局/程序的内存分配

   加载之后,可执行程序看起来占据了一个连续的内存块,这个连续的内存块被称为程序映像(program image).
 
         低地址
 -------------------------- 
 |  程序文本                 | 0x00aa
 --------------------------
 |  已初始化的静态数据  | 0x00bb
 --------------------------
 |  未初始化的静态数据  | 0x00cc
 --------------------------
 |  堆                          | 0x00dd
 --------------------------
 |  栈                          | 0x00ee
 --------------------------
 |命令行参数和环境变量 | 0x00ff
 ---------------------- ---
           高地址

 堆: 用malloc函数族分配的内存 (在堆上分配的存储空间一直存在,直到它被释放free或程序退出。如果一个函数调用了malloc,那么在这个函数返回时,如果存储空间未被free,则空间仍保持已分配状态,除非程序有一个在函数返回之后仍然可以访问的、指向此存储空间的指针,否则,返回后的程序就不能访问它)

 栈: 函数调用的记录(返回地址、参数、已保存的寄存器、自动变量),函数调用时创建一个新的记录,返回时从栈中删除记录
 
 在声明时,没有显示初始化的静态变量,在运行时被初始化为0
 (栈变量)动态变量,即在未初始化时,值在运行时是不确定的
 
 静态变量是非线程,因此除非是在受控的情况下,否则应尽量避免使用静态变量。

 » 相关连接:
 » 本栏目最新帖:
 » 精华帖:

Powered by PHPWind v6.0 Code © 2003-08