C程序一般有以下几部分组成:
从低地址开始分析:
正文段:由CPU执行机器指令的部分。正文段可共享但只读不能修改。
初始化数据段:通常称为数据段;在程序运行之初就为其分配空间,直到程序运行结束才会释放;初始化数据段存放确定初值的全局变量以及确定初值的静态变量(函数体中static修饰的局部变量)。
未初始化的数据段(BSS):在程序运行之初,内核将此段中的数据初始化为0或者NULL且程序运行之初为其分配空间直到程序运行结束才会释放;此段存放未初始化的全局变量及未初始化的静态变量(函数体中static修饰的局部变量)。
堆:动态的对内存进行存储分配;若程序未对分配的内存进行释放,内存会在程序结束时由OS进行释放;对堆进行分配/释放对应函数为malloc/free等。
栈:由编译器自动分配释放;栈存放局部变量、函数调用时返回地址及调用者的环境信息(如寄存器的值)。