代码段、数据段、bss段

(1)编译器在编译程序的时候,将程序中的所有的元素分成了一些组成部分,各部分构成一个段,所以说段是可执行程序的组成部分。

(2)代码段:代码段就是程序中的可执行部分,直观理解代码段就是函数堆叠组成的。

(3)数据段(也被称为数据区、静态数据区、静态区):数据段就是程序中的数据,直观理解就是C语言程序中的全局变量。(注意:全局变量才算是程序的数据,局部变量不算程序的数据,只能算是函数的数据)

(4)bss段(又叫ZI(zero initial)段):bss段的特点就是被初始化为0,bss段本质上也是属于数据段,bss段就是被初始化为0的数据段。 注意区分:数据段(.data)和bss段的区别和联系:二者本来没有本质区别,都是用来存放C程序中的全局变量的。区别在于把显示初始化为非零的全局变量存在.data段中,而把显式初始化为0或者并未显式初始化(C语言规定未显式初始化的全局变量值默认为0)的全局变量存在bss段。

有些特殊数据会被放到代码段

(1)C语言中使用char *p = "linux";定义字符串时,字符串"linux"实际被分配在代码段,也就是说这个"linux"字符串实际上是一个常量字符串而不是变量字符串。

(2)const型常量:C语言中const关键字用来定义常量,常量就是不能被改变的量。

const的实现方法至少有2种:

第一种就是编译将const修饰的变量放在代码段去以实现不能修改(普遍见于各种单片机的编译器);

第二种就是由编译器来检查以确保const型的常量不会被修改,实际上const型的常量还是和普通变量一样放在数据段的(gcc中就是这样实现的)。

显式初始化为非零的全局变量和静态局部变量放在数据段

(1)放在.data段的变量有2种:第一种是显式初始化为非零的全局变量。第二种是静态局部变量,也就是static修饰的局部变量。(普通局部变量分配在栈上,静态局部变量分配在.data段)

未初始化或显式初始化为0的全局变量放在bss段 (1)bss段和.data段并没有本质区别,几乎可以不用明确去区分这两种。

C++中虚函数表位于只读数据段(.rodata),也就是C++内存模型中的常量区;而虚函数则位于代码段(.text),也就是C++内存模型中的代码区。

posted on 2020-04-20 15:37 长戟十三千 阅读(326) 评论(0)  编辑 收藏 引用 所属分类: 编程技巧随笔

c语言变量报存在bss段,浅谈c语言代码段 数据段 bss段相关推荐

  1. c语言弱符号与函数指针,浅谈C语言中的强符号、弱符号、强引用和弱引用【转】...

    首先我表示很悲剧,在看<程序员的自我修养--链接.装载与库>之前我竟不知道C有强符号.弱符号.强引用和弱引用.在看到3.5.5节弱符号和强符号时,我感觉有些困惑,所以写下此篇,希望能和同样 ...

  2. c语言结构共用体的作用,浅谈C语言共用体和与结构体的区别

    共用体与结构体的区别 共用体: 使用union 关键字 共用体内存长度是内部最长的数据类型的长度. 共用体的地址和内部各成员变量的地址都是同一个地址 结构体大小: 结构体内部的成员,大小等于最后一个成 ...

  3. c语言程序与设计教学设计,浅谈C语言程序设计课程的教学设计

    C语言程序设计课程是一门计算机专业程序设计语言类的基础课程,如何将枯燥复杂的语法.单调抽象的函数让学生们有兴趣学习.研究.文章通过在C语言程序设计这门课教学的设计,浅谈了自己的见解和方法. 大多数计算 ...

  4. c语言中的字符串如何拆分,浅谈C语言的字符串拆分

    字符串拆分应用在很多方面,尤其是针对格式化数据的处理,可是不同程序语言对于字符串拆分却有着很大的区别(易用性,效率等方面考虑). 对于格式化数据的处理首先想到的利器就是awk了,它尤其胜任文本的处理, ...

  5. c语言如何将浮点数转换为字节,浅谈C语言整型与浮点型转换

    本篇博客将阐述.讨论的内容: ●int int的范围根据计算机的不同存在16位或32位的差异,以16位举例,最大值为1111 1111 1111 1111,也就是65535,如果出现65536,就会溢 ...

  6. c程序语言的常量变量和标识符,浅谈C语言中的常量与变量.pdf

    课程教育研究 CourseEducationResearch 2014年4月 上旬刊 教学.信息 浅谈C语言中的常量与变量 刘 星 (青 岛工学院商学院 山东 青岛 266300) [摘要]在任何一种 ...

  7. c语言 去掉双引号_技术分享|浅谈C语言陷阱和缺陷

    良好的软件架构.清晰的代码结构.掌握硬件.深入理解C语言是防错的要点,人的思维和经验积累对软件可靠性有很大影响.C语言诡异且有种种陷阱和缺陷,需要程序员多年历练才能达到较为完善的地步.软件的质量是由程 ...

  8. 浅谈go语言交叉编译

    浅谈go语言交叉编译 基础 cgo cgo设置编译和链接参数 静态库和动态库 静态库 动态库 静态编译 cgo的内部连接和外部连接 internal linking external linking ...

  9. 基于c语言的递归算法分析论文,浅谈C语言递归算法.docx

    浅谈C语言递归算法 浅析C语言递归算法王浏江盐城师范学院 信息工程学院 计算机161班 摘要:递归算法,结构清晰,代码简练,函数调用灵活方便,比较容易理解和阅读.因此,递归算法一般用于多个相似小问题组 ...

  10. c语言指针很危险,浅谈C语言中指针使用不当的危险性.doc

    浅谈C语言中指针使用不当的危险性.doc 第 19 卷 Vol . 19 第 2 期 No . 2 洛阳师专学报 Journal of Luoyang Teachers College 2000 年 ...

最新文章

  1. Class.forName(xxx.xx.xx) 解耦
  2. Cacti脚本及模板
  3. 联想618首战告捷,是战略潜力的释放还是最后的“狂欢”?
  4. 填坑利器?Redis如何弥补传统MySQL架构的不足
  5. mysql排序加权_mysql多关键词查询相关匹配加权排序
  6. wincc上位机与1200组态步骤_组态上位机WINCC与PLC通讯连接
  7. 程序员的求生欲有所强?用Python花式哄女友
  8. PSP金手指CMF_r21d修改版安装方法
  9. vector迭代器的使用
  10. 如何建立一个Java商城系统?
  11. 几何画板如何绘制动态正切函数图像
  12. 自动安装L2tp的脚本
  13. Matlab画图线型、符号及颜色设置
  14. Python二维码应用(一)QRcode二维码生成识别
  15. 数据分析案例——航空公司客户价值分析
  16. 什么是JSTL和EL表达式
  17. oj美元和人民币java_【牛客网OJ题】:人民币转换
  18. 21.pgsql中的执行计划explain
  19. 2021牛客寒假算法基础集训营4 F. 魏迟燕的自走棋
  20. 【 malcolmcrum】基于Java后端与Typescript前端的代码自动生成

热门文章

  1. IDC是什么意思,中小企业如何选择IDC机房?
  2. 世界知名半导体ST、NXP、Microchip、TI、Renesas公司的MCU和MPU定位、性能及特点
  3. 利用JS模拟排队系统
  4. c语言看门狗指令pic,PIC单片机之看门狗_看门狗定时器工作原理
  5. 《巴菲特法则》书中的精髓:用好巴菲特企业前景投资法则,股票投资稳赚不赔。
  6. 做软件实施应该学哪些计算机知识,ERP实施顾问的职责及经验总结-乾元坤和
  7. 这3款在线PS工具,得试试
  8. 20+案例教你可视化图表的设计方法
  9. DNF游戏三方制裁解决方案(亲测有效)虚拟机
  10. FoxBarcode(一维码生成库)使用教程