歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

C++程序內存分配詳解

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(代碼區):存放函數體(類成員函數和全局函數)的二進制代碼(可以理解為存放的就是代碼) 程序結束後由系統釋放

更多詳情見請繼續閱讀下一頁的精彩內容: 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

Copyright © Linux教程網 All Rights Reserved