C语言中程序储存时的内存分配与程序运行时的内存分配

https://blog.csdn.net/ljianhui/article/details/21666327

https://blog.csdn.net/youoran/article/details/10990815

    1. 可执行程序在存储时的内存分配
    高    (3)BSS段 (.bss ):未初始化数据区,存入的是全局未初始化或初始化为0的变量
     ↑    (2)数据段(.data):全局初始化数据区/静态数据区,包含在程序中初始化了的全局变量/静态变量/常量数据
    低    (1)代码段(.text):存放CPU执行的机器指令
    
    
    
    2. 程序运行时所占用的内存分配
        (1)代码段:存放可执行的程序代码;
            代码区的指令中包括操作码和要操作的对象(或对象地址引用)。
            如果是立即数(即具体的数值,如5),将直接包含在代码中;
            如果是局部数据,将在栈区分配空间,然后引用该数据地址;
            如果是BSS区和数据区,在代码中同样将引用该数据地址。
        (2)数据段:只初始化一次
        (3)BSS 段:未初始化数据区,在运行时会改变其值
        (4)栈  区:由编译器自动分配释放,存放函数参数值和局部变量的值等;
            其操作方式类似于数据结构-栈,当在代码段中运行到被调函数,其局部变量在栈区分配空间再将值压栈push
            在代码段留下局部变量在栈中的地址,当被调函数返回时,栈区的数据将释放即出栈pop,或要返回局部变量,
            会将局部变量的值复制一份给主调函数。
        (5)堆  区:用于动态内存分配;位于bss段和栈区之间,一般由程序分配和释放或由OS回收;
    
    3. 内存分配分成多区域的原因:
        程序运行时,会多次访问数据,为数据单独开辟空间可以方便访问与节省空间

 

posted @ 2020-03-27 20:47  朱果果  阅读(517)  评论(0)    收藏  举报