1. RAM内存

RAM内存包括:代码段(text)数据段(data)bss段堆栈段(head stack)

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/b1beffdd-b5cb-422c-8308-fe5991a46a7e/93b610051ee31e5e9467f77af3b3acc5.png

2. 编译器编译结果分析

Untitled

编译结果有代码段(text)、数据段(data)、bss段。

从可执行程序的角度来说,如果一个数据未被初始化,就不需要为其分配空间,所以.data 和.bss 的区别就是 .bss 并不占用可执行文件的大小,仅仅记录需要用多少空间来存储这些未初始化的数据,而不分配实际空间。所以......

代码段(text)、数据段(data)这两者相加共同构成可执行文件的大小,dec也就是文件大小(hex也是文件大小,只不过是16进制表示的)。

3.1 堆

**注意:**堆内存需要程序员手动管理内存,通常适用于较大的内存分配,如频繁的分配较小的内存,容易导致内存碎片化。

3.2 栈

**注意:**由于栈的空间通常比较小,一般 linux 程序只有几 M,故局部变量,函数入参应该避免出现超大栈内存使用,比如超大结构体,数组等,避免出现 stack overflow。