***:stack栈

 heap堆


1,全局变量,静态的局部变量:在程序运行前会初始化为0;

2,内存布局规律:内存地址由高到低:

局部变量

动态申请的内存空间

全局变量-未初始化

静态变量-未初始化

静态变量-初始化

全局变量-初始化

字符串常量

函数0033 C语言的内存布局_静态变量0033 C语言的内存布局_初始化_02

栈:是函数执行的内存区域,和堆共享一片区域;存放:局部变量,函数的参数,函数的返回值;

堆:用于存放进程运行中被动态分配的内存段,大小不固定。当进程调用malloc等函数分配内存时,新分配的内存就被动态添加到堆上;当利用free等函数释放内存时,被释放的内存从堆中被剔除;

BSS:block started by symbol 存放程序中未初始化的全局变量及静态局部变量;这个区段中的数据在程序运行前会自动初始化为0;

数据段data:存放已经初始化的全局变量和局部静态变量;

代码段text:存放程序执行代码的一块内存区域;

0033 C语言的内存布局_全局变量_03

0033 C语言的内存布局_初始化_04