博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
20深入理解C指针之---程序的栈和堆
阅读量:5034 次
发布时间:2019-06-12

本文共 1118 字,大约阅读时间需要 3 分钟。

  一、程序在内存中的存储分段:

    程序段主要包括:code段、data段、内核段、堆段和栈段
    1、code段:
      1)、存储程序汇编后程序指令
      2)、此段中的数据是只读的
      3)、不能用于存储变量,可以存储常量
      4)、有固定的大小
    2、data段包括data段和bss段:
      1)、data段主要存储全局变量      

      2)、data段主要存储静态变量      

      3)、data段主要存储已初始化变量

      4)、data段主要存储字符串及其他变量

      5)、data段可以改写,有固定大小

      6)、bss段主要存储未初始化变量

      7)、bss段可以改写,有固定大小

    3、内核段:

      1)、一般用户不能读写      

      2)、处在内存地址空间的最高端      

      3)、涉及到地址,会出现段错误

    4、堆段:
      1)、人工申请分配,易出现内存泄露情况      

      2)、堆内存空间几乎不受任何限制,只与物理内存大小有关      

      3)、频繁分配与释放内存,易产生内存碎片

      4)、向着内存地址增加的方向增长      

      5)、只能动态分配,效率较低      

      6)、堆中的利用的内存是不连续的内存分布 

    5、栈段:

      1)、编译器自动分配      

      2)、栈空间的大小有严格要求      

      3)、不存在内存碎片问题

      4)、向着内存地址减小的方向增长      

      5)、底层支持,可静态或动态分配,效率较高      

      6)、栈中的利用的内存是连续的内存分布 

    6、堆段和栈段的共同点:

      1)、都不能越界访问      

      2)、通常说的堆栈主要指栈段      

      3)、手工分配内存是,堆比栈的使用更加灵活

    程序使用空间的总结:

      1)、自动变量存储在函数的栈帧上,在编译时完成内存分配,主要有局部变量或函数参数等      

      2)、静态或全局变量在程序的数据段      

      3)、数据段处于执行代码和系统管理的其他区域上

      4)、使用函数分配时使用堆空间,堆上的空间需要手动释放      

转载于:https://www.cnblogs.com/guochaoxxl/p/6960836.html

你可能感兴趣的文章
JQuery(一)安装&选择器 样式篇
查看>>
浏览器的DNS缓存查看和清除
查看>>
浏览器跨域问题
查看>>
HTML5 input控件 placeholder属性
查看>>
使用JAVA如何对图片进行格式检查以及安全检查处理
查看>>
html5实现移动端下拉刷新(原理和代码)
查看>>
AES加密解密
查看>>
idea 远程调试(linux)
查看>>
zz [Recommendation System] 推荐系统之协同过滤(CF)算法详解和实现
查看>>
[luogu1373]小a和uim之大逃离【动态规划】
查看>>
利用PHP执行SQL文件,将SQL文件导入到数据库
查看>>
反射的基本介绍
查看>>
暑假集训D10总结
查看>>
iPhone开发中从一个视图跳到另一个视图有三种方法:
查看>>
Alfred 使用简介
查看>>
有一个图像搜索引擎
查看>>
几种查表的方法(转)
查看>>
多线程断点下载原理
查看>>
ios 渐进淡出
查看>>
201521123032 《Java程序设计》第2周学习总结
查看>>