zoukankan      html  css  js  c++  java
  • C语言程序经过编译链接后形成二进制映像文件的组成

    C语言程序经过编译链接后形成二进制映像文件由栈,堆,数据段,代码段组成,其中数据段又分为:只读数据段,已经初始化读写数据段,未初始化数据段(BSS段)。如下图所示:

    1.栈区(stack):由编译器自动分配释放,存放函数的参数值局部变量等值。其操作方式类似于数据结构中的栈。

    2.堆区(heap):一般由程序员释放,若程序员不释放,则可能会引起内存泄露。

        注:1)堆和数据结构中的堆栈不一样,其类是链表。

            2)所谓的内存泄露是指程序在不断运行中内存越来越少,如果程序结束了,那么操作系统会自动将其占用的内存释放掉。

    3.程序代码区:存放函数体的二进制代码,这一部分只可读,不可写。

    4.数据段:

        1)只读数据段:只读数据段是程序使用的一些不会被更改的数据,存放到只读存储器(和代码区一起)。一般是const修饰的变量和程序中使用的一些文字常量

        2)已初始化的读写数据段:在程序中声明,并且具有初值的变量,在程序运行中位于可读写的内存区域,一般为初始化过的全局变量初始化过的static局部变量

        3)未初始化段(BSS):未初始化的数据是在程序中声明,但是没有被初始化的变量,属于静态存储区。未初始化数据段只有在运行的初始化阶段才会产生,因此它的大小不会影响目标文件的大小。在程序中一般是没有初始化的全局变量没有初始化的静态局部变量





  • 相关阅读:
    oracle 导入数据时提示只有 DBA 才能导入由其他 DBA 导出的文件
    oracle 常用语句
    android udp 无法收到数据 (模拟器中)
    android DatagramSocket send 发送数据出错
    AtCoder ABC 128E Roadwork
    AtCoder ABC 128D equeue
    AtCoder ABC 127F Absolute Minima
    AtCoder ABC 127E Cell Distance
    CodeForces 1166E The LCMs Must be Large
    CodeForces 1166D Cute Sequences
  • 原文地址:https://www.cnblogs.com/dchipnau/p/5255266.html
Copyright © 2011-2022 走看看