内存分区

内存数据的分区情况大概是如下这样子的:

  • 动态存储区

    • 1.栈区(stack):由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其 操作方式类似于数据结构中的栈。
    • 2.堆区(heap) :一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事, 分配方式类似于链表
  • 静态存储区(全局区 : static):全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束后由系统释放。

    • 1.已初始化读写数据段(RW data ):已初始化数据是在程序中声明,并且具有初值的变量,这些变量需要占用存储器的空间,在程序执行时它们需要位于可读写的内存区域内,并具有初值,以供程序运行时读写。
    • 2. 未初始化数据段(BSS):未初始化数据是在程序中声明,但是没有初始化的变量,这些变量在程序运行之前不需要占用存储器的空间。 Block Started by Symbol,BSS段的变量只有名称和大小却没有值
    • 3.文字常量区(只读数据段:RO data):只读数据段是程序使用的一些不会被更改的数据,使用这些数据的方式类似查表式的操作,由于这些变量不需要更改,因此只需要放置在只读存储器中即可。通常字符串常量就是放置在这里,程序结束后由系统释放
    • 4.程序代码区:存放二进制代码。

其中,数据段自然包含了三种(BSS,RW Data,RO Data),写过汇编的一定知道 *_*

原文地址:https://www.cnblogs.com/Tattoo-Welkin/p/10335252.html