dtcms 源码 makefile matrix plot terminal threejs rss vue安装 vue下载 河南省普通话考试官网 git视频 seo计费系统 excel太长的文字隐藏 hadoop特点 mysql批量更新数据 java运行软件 css面试题 判断bigdecimal是否为空 本地安装mysql hbuilder插件 mysql入门 python关键字 python命令 python操作mysql windows搭建python开发环境 python零基础 java正则 java实现 java入门新手教程 java语法 安装java环境 java入门学习 java实用教程 java中的泛型 linux教学 flash实例教程 rewritebase dvwa安装教程 vbs表白代码 vbs编程教学
当前位置: 首页 > 学习教程  > 编程语言

c语言学习笔记-内存02

2021/2/13 18:22:23 文章标签: 测试文章如有侵权请发送至邮箱809451989@qq.com投诉后文章立即删除

栈 特性 1. 自动分配 2. 脏内存 3. 反复使用 4. 临时性堆 在有操作系统的平台上面,堆由对内存管理器管理 特性 主动申请脏内存需要释放临时性大块内存 使用流程 申请-检查是否申请成功-存入数据-释放 使用这段内存空间前,最好先用memset将内存清一下零…


  1. 特性
    1. 自动分配
    2. 脏内存
    3. 反复使用
    4. 临时性

  2. 在有操作系统的平台上面,堆由对内存管理器管理
    特性
    1. 主动申请
    2. 脏内存
    3. 需要释放
    4. 临时性
    5. 大块内存

使用流程
申请-检查是否申请成功-存入数据-释放
使用这段内存空间前,最好先用memset将内存清一下零再使用
在使用堆内存的过程中,一定不要丢掉申请的内存指针,否则这块内存得不到释放,就会发生内存泄漏
堆中的内存是按块分配的,在gcc中,最小可申请的空间是16字节,而且在c语言中,越界使用堆内存是不会报错的,除非申请的空间超过堆栈空间,编译器才会报错

  1. 静态存储区
    静态存储区是由代码段(.text),数据段(.data)和bss段构成的
    编译器在编译可执行文件的过程中,将程序分为可可执行的代码和数据
    代码段内存储的就是可执行的代码,也可以理解为函数的集合
    数据段和bss段存储的都是数据,也就是全局变量和静态局部变量,两者区别在于,数据段存储的是显式初始化为非零值的全局变量和静态局部变量
    bss段存储的是未显式初始化和显式初始化为零的全局变量和静态局部变量
    同时需要注意的是,在全局变量中定义的字符串和某些编译环境下被const关键字修饰的变量,也会被编译器加入到代码段中,所以在程序中是无法更改他们的,但是在gcc中,const关键字只会通过编译器检查是否有被更改,变量还是放在数据段的

  2. 总结
    以上几种内存方式中,栈和代码段,数据段的操作都不是开发者能主动分配的,只有堆内存是可以自由使用的
    堆的使用很大程度上可以替换数据段的使用,只是二者生命周期不同,数据段的生命是贯穿程序运行始终的,而堆则是从开辟到释放


本文链接: http://www.dtmao.cc/news_show_700250.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?