首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

浅谈text段、data段和bss段

一般情况,一个程序本质上都是由 bss段、data段、text段三个段组成——这是计算机程序设计中重要的基本概念。...bss 段部分将会清零(bss段属于静态内存分配,即程序一开始就将其清零了)。...比如,在C语言程序编译完成之后,已初始化的全局变量保存在.data 段中,未初始化的全局变量保存在.bss 段中。 text段: 用于存放程序代码的区域, 编译时确定, 只读。...区别很明显,程序1位于bss段,程序2位于data段,两者的区别在于: 全局的未初始化变量存在于bss段中,具体体现为一个占位符,全局的已初始化变量存于data段中,而函数内的自动变量都在栈上分配空间。...BSS段的大小从可执行文件中得到,然后链接器得到这个大小的内存块,紧跟在数据段后面。当这个内存区进入程序的地址空间后全部清零,包含data和bss段的整个区段此时通常称为数据区。

2.5K11
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    保护模式-第4讲-段-段跨越段权限

    目录 保护模式-第4讲-段-段跨越段权限 一丶段描述符 段选择子 等段特权级讲解 1.1 CPU层面的模式 1.2 CPL RPL DPL 讲解 1.2.1 CPL RPL DPL 介绍 1.2.2 CPL...-第4讲-段-段跨越段权限 一丶段描述符 段选择子 等段特权级讲解 1.1 CPU层面的模式 ​ 这一点主要是了解下....一致代码段与非一致代码段的介绍 一致代码段: 可以理解为是共享段.数据是共享的.可以允许低权限去访问 非一直代码段: 如果不想让低权限访问.想对这一块加限制.那么可以用非一致代码段修饰 修饰的本质还是...其实本质还是 构造段选择子. 段选择子指向一个你自己定义的段描述符....段描述符里面可以设置权限等. 1.从GDT表中寻找代码段 ​ 这个简单.根据段描述符.来找 我们上一篇已经说过了. s = 1 代表是代码段或者是数据段.

    1.2K30

    段错误?打的就是段错误!!

    呵,段错误?自从我看了这篇文章,我还会怕你个小小段错误? 请打开你的Linux终端,跟紧咯,准备发车!!...嘟嘟嘟哒~~ ①一段有段错误的代码 #include void errfunc() { int *p = NULL; *p = 1; } int main() {...errfunc(); return 0; } 这段代码拿去运行,肯定段错误。...③看我对症下药 段错误的原因无非是内存越界,据不完全统计,主要有以下这些情况: 1 使用非法的内存地址(指针),包括使用未经初始化及已经释放的指针、不存在的地址、受系统保护的地址,只读的地址等,这一类也是最常见和最好解决的段错误问题...这类问题也是为什么我的程序在其他平台跑得好好的,为什么一移植到这个平台就段错误了。

    3.7K20

    8086汇编语言之数据段和代码段以及栈段的理解

    数据段DS+偏移地址段BX 数据段可以通俗理解为数据容器指针 比如: MOV AX 0220H MOV DS AX MOV BX 0 MOV AX [BX] ;我们发现 DS数据段一直都是在给不同地址的容器赋值...代码段CS+偏移地址段IP 代码段可以通俗理解为汇编代码指针 比如: 代码从 MOV AX 0220H 开始,那么代码段指向这行代码地址, 如果想要跳过这行代码的执行,那么进行代码段偏移 在通过debug...DS=13DB ES=13DB SS=13EB CS=13EB IP=0000 -u 13eb:0 13BE:0000 B8FFFF MOV AX,FFFF 栈段SS+偏移地址段SP 栈段可以通俗理解为栈指针...什么是段 首先内存并没有分段,段的划分来自CPU,来自我们自己对内存的操作。...*16+0x00FA 0xFFFFA=0xFF000*16+0x0FFA 0xFFFFA=0xF0000*16+0xFFFA 段的赋值 代码段CS 数据段DS 栈段SS 不能直接赋值, 必须通过通用寄存器中转赋值

    2.3K30

    轻松带你解决c语言堆、栈、数据段、代码段、bss段的疑惑

    后面的数据段、代码段、bss段,可能你平时没有怎么细心总结,现在你可能还真讲不出他们的区别来,不信的话,读者在看到这里可以先暂定一下,在自己以往写了那么多的代码,仔细回忆看看他们有啥区别,如果不知道也没关系...\n", p2); return 0;   } 输出结果: 三、代码段、数据段、bss段: 编译器在编译程序的时候,将程序中的所有的元素分成了一些组成部分,各部分构成一个段,所以说段是可执行程序的组成部分...1、什么是代码段?        代码段就是程序中的可执行部分,直观理解代码段就是函数堆叠组成的(就是函数体里面的程序那部分)。 2、什么是数据段?      ...3、什么是bss段?      (它又叫ZI(zero initial)段):bss段的特点就是被初始化为0,bss段本质上也是属于数据段,bss段就是被初始化为0的数据段。...注意:       数据段(.data)和bss段的区别和联系:二者本来没有本质区别,都是用来存放C程序中的全局变量的。

    1.5K20

    表段、索引段上的LOGGING与NOLOGGING

    --==================================== -- 表段、索引段上的LOGGING与NOLOGGING --===============================...===== 在有些情况下,对于表段和索引段可以采用记录日志的模式,也可以使用不记录日志的模式。...如在对表段、索引段使用数据泵导入时,可以 使用NOLOGGING模式,而使用DATA GUARD或对可用性较高的场景中需要记录日志,甚至使用强制记录日志。...本文介绍了在表段,索引段使用 LOGGING与NOLOGGING时产生redo的大小以及DIRECT INSERT APPEND 的使用方法。...一、表段,索引段上使用一般DDL,DML时,LOGGING与NOLOGGING情况 1.查看数据库的归档模式 有关设置日志归档模式的问题,请参考: Oracle 联机重做日志文件(ONLINE

    1.8K20

    c程序段-C语言 位运算:位段

    我们现在要学的是位运算里面的位段。   那么什么是位段呢?下面的截图就是位段的解释和一个例子。   ...我们写了一个struckc程序段,然后在里面写了一个正常的结构,都是有一个细微的区别,   那就是我们在他的后面加上了:数值,那么这代表什么呢?   ...可以直接用位段的成员名称来访问   比移位、与、或还方便   编译器会安排其中的位的排列,不具有可移植性   当所需的位超过一个int时会采用多个int   所以说我们的位段就是运用于比较底层的位置,和直接操作硬件的场合...我们可以做一个函数库,我们先定义一些函数c程序段,也就是上面的这些,   当然所有的都是array开头,   create:表示的是创建一个数组,   free:表示的是我们会把那一个数组的空间回收。

    99820

    ElasticSearch 段合并

    由于自动刷新过程每秒会创建一个新的段,这样会导致短时间内段数量暴增。段数目太多会带来比较大的麻烦。每一个段都会消耗文件句柄、内存和 CPU 运行周期。更重要的是,每个搜索请求都必须按顺序检查每个段。...所以段越多,搜索也就越慢。 Elasticsearch 通过在后台进行 段合并 来解决这个问题。小的段被合并成大的段,然后这些大的段会被合并成更大的段。...段合并的时候将那些被标记为删除的旧文档从文件系统中删除。被标记删除的文档或者更新文档的旧版本文档不会被拷贝到新的更大的段中。 段合并不需要你做什么,在索引和搜索时会自动发生。...该过程的工作原理如下图所示,两个提交过的段和一个未提交的段被合并到更大的段中: ? 在索引时,刷新 refresh 进程会创建新的段并开放供搜索。...写入一个新的提交点,其中包含新的段,并排除旧的较小段。 新的段开放供搜索。 旧段被删除。 合并大的段需要消耗大量的I/O和CPU资源,如果任其发展会影响搜索性能。

    1.6K40

    网页字体排版的哲学:段首缩排或段间距

    分段样式 本节主要探讨分段的两种排版样式:段首缩排与段间距。 现状概述 为什么先说这个呢?因为这似乎是网页上字体排版的空白区,很多网站的分段的排版样式都是段间距 + 段首缩排,不忍直视。...排版样式 要将段落分离开来,有两种合理的排版样式:段首缩排与段间距。两种样式的区别: 段首缩排,段首缩进两字符,段间距等于行间距。 段间距式,段首不进行缩进,段间距大于行间距。...当网页快速滚动时,就使段落上下相连的段首缩排显得繁密易懵,而段落上下间隔的段间距则显得结构简明。在这个快速滚动的互联网时代,段间距也就比段首缩排更适合于网页,因为它更利于快速传达信息。...3)如果是诗歌,建议段间距排版,理由见上文。 注意:千万不要同时用段首缩排和段间距!...接下来就是段间距与段首缩排的技术细节。

    1.7K10

    如何读取Linux进程中的代码段和数据段

    Linux下的程序的文件格式是ELF,里面分了各种段,有代码段、数据段、等。当运行这个程序时,系统也会给这个进程创建虚拟内存,然后把ELF中的数据分别加载到内存中的对应位置。...本文整理了用cpp程序读取内存中的代码段和rodata数据段的方法。...这个文件的前三列分别是代码段、rodata数据段、和普通数据段,可以看到代码段的权限是读和执行,rodata数据段是只读,普通数据段可读写。...用程序读取内存的代码段和rodata数据段 以tcpdump程序为例,用程序读取代码段和radata的过程如下: 1.查看tcpdump的进程ID。...2.运行自己写的程序,分别输入进程PID和代码段的地址。

    3.9K20

    保护模式 2讲 -段 -段寄存器结构

    保护模式 -段 -段寄存器结构 一丶保护模式学习 保护模式,主要学习的就是段 与 页 的关系. 学习段的时候先学习段寄存器 何为段 根据Intel 手册第三卷所属....出了FS寄存器.还有 ES CS SS DS GS LDTR TR等段寄存器 我们上面所说的 段.base 其实是段寄存器的一个成员....可以理解为段寄存器就是一个结构体 PS: 在inter手册中也称为段寄存器为段描述符 2.2 段寄存器结构 在我们x86平台下.我们知道一个寄存器是 4个字节. 32位. 可以表达一个32位的数据....但是我们的段 却很少有人关注 其实我们的段 是有96位的.是一个结构体....依靠段寄存器结构所知. 出了CS段 不能写之外.其余段都是可以写的. 那么看一下内敛汇编代码.

    1.5K20

    Linux从头学03:如何告诉 CPU,代码段、数据段、栈段在内存中什么位置?

    几个重要的段寄存器 在 x86 系统中,段寻址机制以及相关的寄存器是如此的重要,以至于我忍不住在这里,把几个段寄存器再小结一下。 ?...代码段:用来存放代码,段的基地址放在寄存器 CS 中,指令指针寄存器 IP 用来表示下一条指令在段中的偏移地址; 数据段:用来存放程序处理的数据,段的基地址存放在寄存器 DS 中。...虽然这张图中描述的段结构更复杂,但是从本质上来说,它与 8086 中描述的段结构是一样的!...这张图的意思是:在 Linux 2.6 中,用户代码段的开始地址是 0,最大范围是 4 GB;用户数据段的开始地址是 0,最大范围也是 4 GB;内核的数据段和代码段也是如此。 ?...在这个最简单的汇编程序中,会使用到 3 个段:代码段,数据段和栈段。 前面已经说到:所谓的段,就是一个地址空间。既然是一个地址空间,必然包含 2 个元素:从什么地方开始,长度是多少。

    2.3K40

    二阶段提交 vs 三阶段提交

    分布式事务使用最多的是二阶段提交以及其变种,了解其优缺点可以帮助决定在分布式系统上是否采用事务 二阶段提交(2PC) 什么是2PC 二阶段提交本身比较简单,就是把分布式事务分成准备阶段和提交阶段两个阶段...二阶段无法解决的问题 协调者再发出commit消息之后宕机,而唯一接收到这条消息的参与者同时也宕机了。...换句话说,二阶段提交协议没有设计较为完善的容错机制,任意一个节点的失败都会导致整个事务的失败。 三阶段提交(3PC) 什么是3PC 与两阶段提交不同的是,三阶段提交有两个改动点。 引入超时机制。...将2PC第一阶段一分为二,在CanCommit阶段中可以尽早给出事务是否可以执行的判断,占用资源很少,提高了吞吐量。...参考 《从Paxos到ZooKeeper》 《MySQL技术内幕——InnoDB存储引擎》 关于分布式事务、两阶段提交、一阶段提交、Best Efforts 1PC模式和事务补偿机制的研究 关于分布式事务

    3K30
    领券