记录自已学习之C语言存储区

来源:互联网 发布:怎么推广app软件 编辑:程序博客网 时间:2024/05/26 08:42
        到现在终于要说说C语言的存储区了,可能是说的比较晚了,但是以前看过书还有别人写的博文,都觉得别人写的还是挺好的,所以自已就是一直没有写。但是最近在面试的时候发现自已还是记得不太牢固,现在就来自已学习的博文里面重新整理一次,这也帮我复习还有记忆这些东西,也帮你们总结一下关于C语言的存储区的问题,可能对于你们来说这些不算什么,但是我还是帮自已总结一下。
个人觉得C语言的存储区可以分为五个区域:栈区、堆区、代码区、数据区、bss区
        先来说第一个栈区:栈就是用于来存放局部变量的,就是在函数中存在一段时间的那些局部变量,由于局部变量的作用周期是有限的(临时性),只存在一段时间,因此就被自动释放的,申请的时候只是创建变量就行,不用人手工申请,还有因为栈区是自动释放的,所以是一个脏区,没人清理,用完就释放,所以是脏,还有就是栈区的大小是有限的,如果过分使用并且不释放也会造成栈溢出。
        第二个就是堆区:堆区跟栈区就是有点不一样了,堆区是需要自已手工申请和手工释放的,使用两个函数就是malloc和free,它的存在周期也是有限的,就是在开始申请到最后释放。释放之后就不能再使用了(或许说是不允许再使用了,其实还是能使用的),还有就是堆区申请了,用完之后就是把它释放了,不然会造成内存泄露的,虽然它的存储空间比较大,但是还是会用完的。
        第三个就是代码区了:代码区也是叫做.text段,就是程序中执行的地方,就是有许多的函数堆叠而来的。
        第四个就是数据区:数据区也被称为数据段,静态数据区,静态区,数据区顾名思义就是存放数据的地方,但是这里面存放的是全局变量,为什么存放全局变量,不存放局部变量呢?因为一般我们称全部变量才是程序的真正数据,局部变量只是函数中的数据,不可以称为程序的数据。但是这里存放的是已经被初始化的全局变量。
        第五个就是bss区:bss区(uninitialized data segment),存放的是没被初始化的全局变量,也是一个存放程序数据的地方,也就是被初始化为零的全局变量的地方。


        最后还是想要提示一点:就是当我们声明一个字符串常量的时候,他不是放在了栈区,而是放在了我们的代码区,因为字符串常量是不可改变的,所以系统时可能为了省事把它放在了不可改变的代码区。


具体可以参考这一篇文:http://blog.csdn.net/wubobupt/article/details/8146318

原创粉丝点击