记录自已学习之C语言存储区
来源:互联网 发布:怎么推广app软件 编辑:程序博客网 时间:2024/05/26 08:42
到现在终于要说说C语言的存储区了,可能是说的比较晚了,但是以前看过书还有别人写的博文,都觉得别人写的还是挺好的,所以自已就是一直没有写。但是最近在面试的时候发现自已还是记得不太牢固,现在就来自已学习的博文里面重新整理一次,这也帮我复习还有记忆这些东西,也帮你们总结一下关于C语言的存储区的问题,可能对于你们来说这些不算什么,但是我还是帮自已总结一下。
个人觉得C语言的存储区可以分为五个区域:栈区、堆区、代码区、数据区、bss区
先来说第一个栈区:栈就是用于来存放局部变量的,就是在函数中存在一段时间的那些局部变量,由于局部变量的作用周期是有限的(临时性),只存在一段时间,因此就被自动释放的,申请的时候只是创建变量就行,不用人手工申请,还有因为栈区是自动释放的,所以是一个脏区,没人清理,用完就释放,所以是脏,还有就是栈区的大小是有限的,如果过分使用并且不释放也会造成栈溢出。
第二个就是堆区:堆区跟栈区就是有点不一样了,堆区是需要自已手工申请和手工释放的,使用两个函数就是malloc和free,它的存在周期也是有限的,就是在开始申请到最后释放。释放之后就不能再使用了(或许说是不允许再使用了,其实还是能使用的),还有就是堆区申请了,用完之后就是把它释放了,不然会造成内存泄露的,虽然它的存储空间比较大,但是还是会用完的。
第三个就是代码区了:代码区也是叫做.text段,就是程序中执行的地方,就是有许多的函数堆叠而来的。
第四个就是数据区:数据区也被称为数据段,静态数据区,静态区,数据区顾名思义就是存放数据的地方,但是这里面存放的是全局变量,为什么存放全局变量,不存放局部变量呢?因为一般我们称全部变量才是程序的真正数据,局部变量只是函数中的数据,不可以称为程序的数据。但是这里存放的是已经被初始化的全局变量。
第五个就是bss区:bss区(uninitialized data segment),存放的是没被初始化的全局变量,也是一个存放程序数据的地方,也就是被初始化为零的全局变量的地方。
最后还是想要提示一点:就是当我们声明一个字符串常量的时候,他不是放在了栈区,而是放在了我们的代码区,因为字符串常量是不可改变的,所以系统时可能为了省事把它放在了不可改变的代码区。
个人觉得C语言的存储区可以分为五个区域:栈区、堆区、代码区、数据区、bss区
先来说第一个栈区:栈就是用于来存放局部变量的,就是在函数中存在一段时间的那些局部变量,由于局部变量的作用周期是有限的(临时性),只存在一段时间,因此就被自动释放的,申请的时候只是创建变量就行,不用人手工申请,还有因为栈区是自动释放的,所以是一个脏区,没人清理,用完就释放,所以是脏,还有就是栈区的大小是有限的,如果过分使用并且不释放也会造成栈溢出。
第二个就是堆区:堆区跟栈区就是有点不一样了,堆区是需要自已手工申请和手工释放的,使用两个函数就是malloc和free,它的存在周期也是有限的,就是在开始申请到最后释放。释放之后就不能再使用了(或许说是不允许再使用了,其实还是能使用的),还有就是堆区申请了,用完之后就是把它释放了,不然会造成内存泄露的,虽然它的存储空间比较大,但是还是会用完的。
第三个就是代码区了:代码区也是叫做.text段,就是程序中执行的地方,就是有许多的函数堆叠而来的。
第四个就是数据区:数据区也被称为数据段,静态数据区,静态区,数据区顾名思义就是存放数据的地方,但是这里面存放的是全局变量,为什么存放全局变量,不存放局部变量呢?因为一般我们称全部变量才是程序的真正数据,局部变量只是函数中的数据,不可以称为程序的数据。但是这里存放的是已经被初始化的全局变量。
第五个就是bss区:bss区(uninitialized data segment),存放的是没被初始化的全局变量,也是一个存放程序数据的地方,也就是被初始化为零的全局变量的地方。
最后还是想要提示一点:就是当我们声明一个字符串常量的时候,他不是放在了栈区,而是放在了我们的代码区,因为字符串常量是不可改变的,所以系统时可能为了省事把它放在了不可改变的代码区。
具体可以参考这一篇文:http://blog.csdn.net/wubobupt/article/details/8146318
阅读全文
0 0
- 记录自已学习之C语言存储区
- 记录自已的学习之关键字static
- 记录自已学习之面试题1
- 记录自已学习之单链表(创建)
- 记录自已学习之宏定义
- 记录自已学习之单链表(遍历)
- 记录自已学习之单链表(头插)
- 记录自已学习之单链表(尾插)
- 记录自已学习之单链表(删除节点)
- 记录自已学习之堆栈(链表)
- 记录自已学习之单链表(逆序)
- 记录自已学习之位操作符
- 记录自已学习之关键字const
- 记录自已学习之临时匿名变量
- 记录自已学习之逻辑运算符
- 记录自已学习之面试题2
- 记录自已学习之面试题3
- 记录自已学习之面试题4
- 基于R-CNN的物体检测(转自 hjimce的专栏)
- c++初级 之 c++的字符串string
- 理解git中的head和master
- 03.assetbundle打包的一种用法
- 前端基础知识
- 记录自已学习之C语言存储区
- 深入理解Java类加载器(2):线程上下文类加载器
- 【原创】Selenium学习系列之(七)—ConnectDB和复用测试方法
- 缺失值处理方法
- IntelliJ IDEA 热部署,修改java文件 不用重启tomcat
- 【PDF下载】运维/DevOps峰会之构建通用智能运维平台
- JS源文件中文注释乱码解决
- spark学习-21-Spark的groupByKey
- break和continue