C语言可执行代码结构名称

内容

代码段

可执行代码、字符串常量

数据段

已初始化全局变量、已初始化全局静态变量、局部静态变量、常量数据

BSS段

未初始化全局变量,未初始化全局静态变量

局部变量、函数参数

动态内存分配

(1)代码段(text segment):存放CPU执行的机器指令。通常代码段是可共享的,这使得需要频繁被执行的程序只需要在内存中拥有一份拷贝即可。代码段也通常是只读的,这样可以防止其他程序意外地修改其指令。另外,代码段还规划了局部数据所申请的内存空间信息。

代码段(code segment/text segment)通常是指用来存放程序执行代码的一块内存区域。这部分区域的大小在程序运行前就已经确定,并且内存区域通常属于只读, 某些架构也允许代码段为可写,即允许修改程序。在代码段中,也有可能包含一些只读的常数变量,例如字符串常量等。

(2)数据段(data segment):或称全局初始化数据段/静态数据段(initialized data segment/data segment)。该段包含了在程序中明确被初始化的全局变量、静态变量(包括全局静态变量和局部静态变量)和常量数据。

(3)未初始化数据段:亦称BSS(Block Started by Symbol)。该段存入的是全局未初始化变量、静态未初始化变量。

而当程序被加载到内存单元时,则需要另外两个域:堆域和栈域。

(4)栈段(stack):存放函数的参数值、局部变量的值,以及在进行任务切换时存放当前任务的上下文内容。

(5)堆段(heap):用于动态内存分配,即使用malloc/free系列函数来管理的内存空间。

在将应用程序加载到内存空间执行时,操作系统负责代码段、数据段和BSS段的加载,并将在内存中为这些段分配空间。栈段亦由操作系统分配和管理,而不需要程序员显示地管理;堆段由程序员自己管理,即显示地申请和释放空间。

另外,可执行程序在运行时具有相应的程序属性。在有操作系统支持时,这些属性页由操作系统管理和维护。

下面给出示例程序代码,注释已经在代码中写明:

复制代码 代码如下:

/*代码段、数据段和BSS段存储变量类型*/

#include

const int    g_A       = 10;            //代码段

int            g_B       = 20;            //数据段

static int    g_C       = 30;            //数据段

static int    g_D;                    //BSS段

int            g_E;                    //BSS段

char        *p1;                    //BSS段

void main( )

{

int           local_A;            //栈

static int    local_C = 0;        //数据段

static int    local_D;            //数据段

char        *p3 = "123456";     //123456在代码段,p3在栈上

p1 = (char *)malloc( 10 );      //堆,分配得来得10字节的区域在堆区

strcpy( p1, "123456" );         //123456{post.content}放在常量区,编译器可能会将它与p3所指向 的"123456"优化成一块

printf("\n");

printf( "代码段,全局初始化变量, 只读const,  g_A,     addr:0x%08x\n", &g_A);

printf("\n");

printf( "数据段,全局变量,       初始化      g_B,     addr:0x%08x\n", &g_B);

printf( "数据段,静态全局变量,   初始化,     g_C,     addr:0x%08x\n", &g_C);

printf("\n");

printf( "BSS段, 全局变量,       未初始化    g_E,     addr:0x%08x\n", &g_E, g_E );

printf( "BSS段, 静态全局变量,   未初始化,   g_D,     addr:0x%08x\n", &g_D );

printf( "BSS段, 静态局部变量,   初始化,     local_C, addr:0x%08x\n", &local_C);

printf( "BSS段, 静态局部变量,   未初始化,   local_D, addr:0x%08x\n", &local_D);

printf("\n");

printf( "栈,    局部变量,                   local_A, addr:0x%08x\n", &local_A );

printf("\n");

printf( "堆,    malloc分配内存,             p1,      addr:0x%08x\n", p1 );

}

c语言中注释部分执行,深入C语言内存区域分配(进程的各个段)详解相关推荐

  1. c语言除法在全局区,深入C语言内存区域分配(进程的各个段)详解

    C语言可执行代码结构 名称 内容 代码段 可执行代码.字符串常量 数据段 已初始化全局变量.已初始化全局静态变量.局部静态变量.常量数据 BSS段 未初始化全局变量,未初始化全局静态变量 栈 局部变量 ...

  2. c 语言中双向链表逆转编程题,C/C++ 双链表之逆序的实例详解

    C/C++ 双链表之逆序的实例详解 一.结点结构 双向链表的数据结构定义如下: typedef struct node { ElemType data; struct node *prior stru ...

  3. A13在c语言中是合法变量吗,C语言中局部变量和全局变量等在内存中的存放位置.doc-资源下载在线文库www.lddoc.cn...

    C语言中局部变量和全局变量_等在内存中的存放位置.doc C 语言中局部变量和全局变量 变量的存储类别static,extern,auto,register 8.8 局部变量和全局变量在讨论函数的形参 ...

  4. C 语言内存区域分配(进程的各个段)详解

    C语言可执行代码结构  名称 内容 代码段  可执行代码.字符串常量 数据段  已初始化全局变量.已初始化全局静态变量.局部静态变量.常量数据 BSS段  未初始化全局变量,未初始化全局静态变量 栈 ...

  5. 第7.26节 Python中的@property装饰器定义属性访问方法getter、setter、deleter 详解

    第7.26节 Python中的@property装饰器定义属性访问方法getter.setter.deleter 详解 一.    引言 Python中的装饰器在前面接触过,老猿还没有深入展开介绍装饰 ...

  6. python调用shell脚本的参数_使用python执行shell脚本 并动态传参 及subprocess的使用详解

    最近工作需求中 有遇到这个情况 在web端获取配置文件内容 及 往shell 脚本中动态传入参数 执行shell脚本这个有多种方法 最后还是选择了subprocess这个python标准库 subpr ...

  7. c语言表示注释,c语言中注释的位置

    匿名用户 1级 2011-10-21 回答 1 注释的原则和目的注释的原则是有助于对程序的阅读理解,在该加的地方都加了,注释不宜太多也不能太少,注释语言必须准确.易懂.简洁.通过对函数或过程.变量.结 ...

  8. c语言注释语句执行吗,C语言学习笔记之C语言概念解析(附资料分享)每一个语句都必须以分号结尾但预处理命令函数头和花括号“}”之后不能加分号...

    [[怪兽爱C语言]C语言学习笔记之C语言概念解析(附资料分享)]https://toutiao.com/group/6582429294901854728/?iid=15906422033&a ...

  9. c语言将注释和语句分离,C语言组卷系统中重复题问题研究

    C语言组卷系统中重复题问题研究 作者:陈星 李郴 来源:电脑知识与技术 201801期 时间:2018-06-02 摘要:在一套试卷中,重复题问题是影响考试质量的一个重要因素.该文针對C语言试卷中选择 ...

最新文章

  1. 编程没基础学python多长时间--零基础学Python,从入门到精通需要多长时间
  2. tomcat7.0.8的高级应用-apr1.4.2安装
  3. 大数据分析中国冬季重度雾霾的成因(二)
  4. Minio分布式集群示例:8个节点,每节点1块盘
  5. 经典卷积神经网络--AlexNet的详解
  6. SQLServer数据库设置项梳理
  7. android /data/data/数据作用,android 清除data/data/ 下其他应用的数据
  8. 与AI人才有关的讨论
  9. Caused by: java.net.ConnectException: Connection refused: no further information
  10. Python-Socket-Programming(1)
  11. python 字符串以及通过dos命令运行py脚本
  12. 嵌入式开发|STM32工程中添加Bootloader实现串口程序下载
  13. Spring的开幕式——Spring概述与设计思想
  14. 2021“华为杯”第十八届中国研究生数学建模竞赛有感
  15. java o2o 源码_电子商务平台 b2b2c o2o java源码
  16. .md文件简单的转化为pdf文件
  17. 基于java植物大全智能识别系统设计与实现
  18. elementUI——form表单
  19. faster-rcnn 训练自己的数据集
  20. 顶级程序员的心得 –– Coders at Work

热门文章

  1. 列联表相关测量--φ列相关系数
  2. 一个JQuery发送ajax请求
  3. iOS的一些常用性能优化,和内存优化的方法
  4. Windows中打开方式...无法指定程序的解决办法
  5. 界面Hello world
  6. linux fcitx启动 窗口,Linux系统Fcitx中文输入法开机启动方法
  7. hbid新建html标签不能用,hbhdjtx.html
  8. python实现远程登录_python远程登录代码
  9. java 文件写入 读取_JAVA文件的两种读取方法和三种写入方法
  10. springboot集成swagger2测试接口