BSS段,BSS段bss segment是C语言中的内容还是汇编语言中的内容啊
来源:整理 编辑:智能门户 2023-08-22 14:01:36
本文目录一览
1,BSS段bss segment是C语言中的内容还是汇编语言中的内容啊
是程序的段式内存管理的内容,一般bss, data,text 段。网上查一下吧ptr_to_return -> params -> block_size这里可以不,我感觉应该不行吧!
2,BSS的结构
在采用段式内存管理的架构中(比如intel的80x86系统),bss段(Block Started by Symbol segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域,一般在初始化时bss 段部分将会清零。bss段属于静态内存分配,即程序一开始就将其清零了。比如,在C语言之类的程序编译完成之后,已初始化的全局变量保存在.data 段中,未初始化的或初始化为0全局变量保存在.bss 段中。text和data段都在可执行文件中(在嵌入式系统里一般是固化在镜像文件中),由系统从可执行文件中加载;而bss段不在可执行文件中,由系统初始化。
3,data段与bss段是怎么加载到SRAM中
bss段里面存放的是无初始值的全局变量、初始值为0的变量。也就是后面要初始化的变量,所以uboot在linux下 需要加载一个可执行程序到内存时会调用exec函数 exec函数会读取可执行文件的头部信息 其中就包括各段(code data bss)的起始地址和结束地址 因为bss时未初始化的数据段 exec函数就会把bss段【起始地址-结束地址】映射到一个全0的页(叫什么名字我忘记了 反正linux有专门的这么一页内存4k,所以程序(不只你的程序)未初始化的数据都映射到此页),至于linux为什么要这样,其实你可以自己想想,你未初始化一个数据(好比你定义一个 int a (全局的 或 静态的)) 你以后可能不会再程序中用它(因为你编程失误) 这样因为没有跟它分配内存(而只是映射了一下) 所以不会浪费宝贵的内存 如果以后再程序中用到此变量 如果是读则是0(此映射不会变) 但是如果你写此变量 他就会分配一页内存存放你的bss段(this is call copyonwite),并且将此页全清零 好了 不说了 我也是菜鸟
4,请教高手linux C GNUbss与data段的区别是bss段是不占存储空间
在linux下 需要加载一个可执行程序到内存时会调用exec函数 exec函数会读取可执行文件的头部信息 其中就包括各段(code data bss)的起始地址和结束地址 因为bss时未初始化的数据段 exec函数就会把bss段【起始地址-结束地址】映射到一个全0的页(叫什么名字我忘记了 反正linux有专门的这么一页内存4K,所以程序(不只你的程序)未初始化的数据都映射到此页),至于linux为什么要这样,其实你可以自己想想,你未初始化一个数据(好比你定义一个 Int a (全局的 或 静态的)) 你以后可能不会再程序中用它(因为你编程失误) 这样因为没有跟它分配内存(而只是映射了一下) 所以不会浪费宝贵的内存 如果以后再程序中用到此变量 如果是读则是0(此映射不会变) 但是如果你写此变量 他就会分配一页内存存放你的bss段(this is call copyonwite),并且将此页全清零 好了 不说了 我也是菜鸟搜一下:请教高手,linux C GNU,.bss与.data段的区别是.bss段是不占存储空间,原理是怎样的,应该怎么理解??
5,终于知道什么叫BSS段
BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域。配。 BSS段用来分配未初始化(或初始化为0)的全局变量和静态变量。段 ,一种标示而已,只是为了区别和更好认识一些概念而已,text、code一般是代码段,用过vc或bcb就知道,这种标识的东西没必要深究...知道用来标识的意思就够了,至于一个文件有多少段其实决定与你,但是一般程序编译出来后都有几个默认的段保证程序能正常运行,目标文件也是一样的, .o -对象文件 exe 可执行文件,exe是否被优化取决与编译选项 exe是pe文件格式的一种体现,pe文件格式是windows下大多数文件的格式,而elf遵循coff文件格式,exe和elf等价是没错的,但不能说两者文件格式相同~ 因为pe和coff格式还是存在区别的 其他具体的自己百度下看看两中格式就知道了 ------------------------------------------------- 至于堆栈段吗,其实这些都是标识,方便我们理解一些概念而产生的名字,只要知道堆栈的作用代表的意思就可以了
6,BSS是什么意识
BSS全名为:Base Station Subsystem,GSM网络中的基站子系统模块 。 WLAN中的BSS:一种特殊的Ad-hoc LAN的应用,称为Basic Service Set (BSS),一群计算机设定相同的BSS名称,即可自成一个group,而此BSS名称,即所谓BSSID。是“Block Started by Symbol”的缩写,意为“以符号开始的块”。 BSS是Unix链接器产生的未初始化数据段。其他的段分别是包含程序代码的“text”段和包含已初始化数据的“data”段。BSS段的变量只有名称和大小却没有值。此名后来被许多文件格式使用,包括PE。“以符号开始的块”指的是编译器处理未初始化数据的地方。BSS节不包含任何数据,只是简单的维护开始和结束的地址,以便内存区能在运行时被有效地清零。BSS节在应用程序的二进制映象文件中并不存在。 在采用段式内存管理的架构中(比如intel的80x86系统),bss段(Block Started by Symbol segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域,一般在初始化时bss 段部分将会清零。bss段属于静态内存分配,即程序一开始就将其清零了。 比如,在C语言之类的程序编译完成之后,已初始化的全局变量保存在.data 段中,未初始化的全局变量保存在.bss 段中。 text和data段都在可执行文件中(在嵌入式系统里一般是固化在镜像文件中),由系统从可执行文件中加载;而bss段不在可执行文件中,由系统初始化。
文章TAG:
BSS段 BSS段bss segment是C语言中的内容还是汇编语言中的内容啊