C和C++安全编码(原书第2版)
上QQ阅读APP看书,第一时间看更新

2.3.4 进程内存组织

进程

已载入内存并受操作系统管理的程序实例。

如图2.5的(a)列所示,进程的内存一般分为code(代码段)、data(数据段)、heap(堆)以及stack(栈)。

code和text段包含了程序的指令和只读数据。它们可以被标记为只读,从而当试图对其对应的内存进行修改时,就会引发错误。(把内存标记为只读有两种方法,一是使用支持该功能的计算机硬件平台的内存管理硬件,二是安排内存,使可写的数据和只读数据存储在不同的页面。)data段包含了初始化数据、未初始化数据、静态变量以及全局变量。heap则用于动态地分配进程内存。stack是一个后进先出(last-in,first-out,LIFO)数据结构,用于支持进程的执行。

进程内存的精确组织形式依赖于操作系统、编译器、链接器以及载入器—换言之,依赖于编程语言的实现。图2.5的(b)列和(c)列展示了UNIX和Win32上可能的进程内存组织形式。

图2.5 进程内存组织