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個部分。
程序調入內存(執行時),其結構如下:
(1)Stack(棧區):局部變量 由編譯器自動分配釋放
(2)Heap(堆區):動態變量,由new /malloc分配的數據 一般由程序員分配釋放, 若程序員不釋放,程序結束時可能由OS回收
(3)BSS(Uninitiated Data):全局變量,static,常量 程序結束後由系統釋放
(4)Data(Initialized Data):全局變量,static,常量 程序結束後由系統釋放
(5)Text(代碼區):存放函數體(類成員函數和全局函數)的二進制代碼(可以理解為存放的就是代碼) 程序結束後由系統釋放
更多詳情見請繼續閱讀下一頁的精彩內容: http://www.linuxidc.com/Linux/2013-10/91627p2.htm
參考:
C/C++程序內存分配詳解 http://www.linuxidc.com/Linux/2013-10/91628.htm
C++程序的內存布局 http://www.linuxidc.com/Linux/2013-02/79404.htm