1. 硬盘中的结构——程序
首先在Linux下查看一下test文件的信息:
[root@localhost Ctest]# file test //此文件基本情况
test: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV),
for GNU/Linux 2.2.5, dynamically linked (uses shared libs), not stripped
[root@localhost Ctest]# size test //此二进制可执行文件结构情况
text data bss dec hex filename
906 284 4 1194 4aa test
//代码区静态数据/全局初始化数据区 未初始化数据区 十进制总和 十六进制总和 文件名
此可执行程序在存储时(没有调入到内存)分为代码区(text)、数据区(data)和未初始化数据区(bss)3个部分。
2. 内存中的结构——进程程序调入内存(执行时),其结构如下:
(1)Stack(栈区):局部变量 由编译器自动分配释放
(2)Heap(堆区):动态变量,由new /malloc分配的数据 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收
(3)BSS(Uninitiated Data):全局变量,static,常量 程序结束后由系统释放
(4)Data(Initialized Data):全局变量,static,常量 程序结束后由系统释放
(5)Text(代码区):存放函数体(类成员函数和全局函数)的二进制代码(可以理解为存放的就是代码) 程序结束后由系统释放