捐助郴维网
感谢您对郴维网的支持,你的支持将是郴维网持续发展的动力!
二维码
×
当前位置:郴维网 >知识点备忘 > 正文
15 2018.02

S1E39:C语言的内存布局

点击次数:953 更新时间:2018/2/15 17:46:03  【打印此页

知识点回顾

1. C 语言的内存布局规律

 

可以看到局部变量的地址是占据高地,接着是 malloc 函数申请的动态内存空间,然后是全局变量和静态局部变量。

不过这两者都需要区分是否已经初始化,已经初始化的放一块,未初始化的放一块,并且未初始化的地址要比已经初始化的要更高一些。接着下来是字符串常量,最后是函数的地址。


2. 典型 C 语言程序的内存空间划分

 

根据内存地址从低到高分别划分为:

 

·         代码段(Text segment)

·         数据段(Initialized data segment)

·         BSS段(Bss segment/Uninitialized data segment)

·         栈(Stack)

·         堆(Heap)



3. 代码段(Text segment

代码段通常是指用来存放程序执行代码的一块内存区域。

这部分区域的大小在程序运行前就已经确定,并且内存区域通常属于只读。

在代码段中,也有可能包含一些只读的常数变量,例如字符串常量等。


4. 数据段(Initialized data segment

数据段通常用来存放已经初始化的全局变量和局部静态变量。


5. BSS段(Bss segment/Uninitialized data segment

BSS 段通常是指用来存放程序中未初始化的全局变量的一块内存区域。

BSS 是英文 Block Started by Symbol 的简称,这个区段中的数据在程序运行前将被自动初始化为数字 0。


6.

前边我们学习了动态内存管理函数,使用它们申请的内存空间就是分配在这个堆里边。

所以,堆是用于存放进程运行中被动态分配的内存段,它的大小并不固定,可动态扩展或缩小。

当进程调用 malloc 等函数分配内存时,新分配的内存就被动态添加到堆上;当利用 free 等函数释放内存时,被释放的内存从堆中被剔除。


7.

大家平时可能经常听到堆栈这个词,一般指的就是这个栈。

栈是函数执行的内存区域,通常和堆共享同一片区域。


8. 堆和栈的对比

堆和栈则是 C 语言运行时最重要的元素,下面我们将两者进行对比。

申请方式:

 

·         堆由程序员手动申请

·         栈由系统自动分配


释放方式:

 

·         堆由程序员手动释放

·         栈由系统自动释放


生存周期:

 

·         堆的生存周期由动态申请到程序员主动释放为止,不同函数之间均可自由访问

·         栈的生存周期由函数调用开始到函数返回时结束,函数之间的局部变量不能互相访问


发展方向:

 

·         堆和其它区段一样,都是从低地址向高地址发展

·         栈则相反,是由高地址向低地址发展

提示
郴维网为您提供各类专业服务:
软件开发,电脑配件销售,WIFI路由器销售,上门电脑维修,上门安装系统,系统安装,软、硬件安装,电脑除尘清灰,显示器维修,WIFI安装调试,服务器维护,数据恢复,密码破解,网络布线,网络检修,打印机维修,打印机加碳粉,苹果电脑安装系统,苹果电脑安装双系统,监控安装维护,电脑外包,笔记本电脑维修,餐饮、美容行业软件安装 等。。。。。。
点击次数:953 更新时间:2018/2/15 17:46:03  【打印此页
关键词推荐:郴州电脑城 郴州电脑维修公司 维修电脑公司 郴州软件开发 上门电脑维修 上门安装系统 笔记本电脑维修 郴州打印机维修 打印机加碳粉 电脑安装双系统 苹果电脑双系统 液晶显示器维修 联想笔记本维修 联想笔记本维修电话 戴尔笔记本维修电话 郴州戴尔笔记本维修 戴尔笔记本郴州维修点 华硕笔记本维修点 郴州华硕笔记本维修 郴州笔记本上网维修