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(代码区):存放函数体(类成员函数和全局函数)的二进制代码(可以理解为存放的就是代码) 程序结束后由系统释放

更多详情见请继续阅读下一页的精彩内容

参考:

C/C++程序内存分配详解

C++程序的内存布局

  • 1
  • 2
  • 下一页

相关内容