zoukankan      html  css  js  c++  java
  • 20深入理解C指针之---程序的栈和堆

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



        程序段主要包括: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)、使用函数分配时使用堆空间,堆上的空间需要手动释放      

  • 相关阅读:
    DevExpress VCL for Delphi 各版本收集下载
    Delphi XE 5,Rad Studio XE 5 官方下载(附破解),更新 Update 1,Help Update 1
    PostMessage 向Windows窗口发送Alt组合键
    Windows XP UDF 2.5 补丁,播放蓝光ISO光盘必备
    60个开发者不容错过的免费资源库
    [转]游戏多开的原理
    Delphi加载驱动
    窗口截图
    Drectx 3D窗口后台截图
    利用进程ID获取主线程ID
  • 原文地址:https://www.cnblogs.com/guochaoxxl/p/6960836.html
Copyright © 2011-2022 走看看