最近了解到.bss段存放未初始化的数据。但是,当我尝试如下所示的小程序并在终端中使用size(1)命令时,即使我添加了一些全局变量,.bss段也没有改变。我是不是误解了什么?jameschu@aspire-e5-573g:~$cattest.c#includeintmain(void){printf("helloworld\n");return0;}jameschu@aspire-e5-573g:~$gcc-ctest.cjameschu@aspire-e5-573g:~$sizetest.otextdatabssdechexfilename89008959test.ojameschu
我正在使用一个测试程序来了解内核版本为2.6.32-279.el6.x86_64的linux6.3上的C内存模型。首先我编译了下面的代码,#includeintmain(void){staticinti=100;/*InitializedstaticvariablestoredinDS*/return0;}在运行尺寸命令时,我得到了下面,[root@rachitjainjan14]#sizea.outtextdatabssdechexfilename1040488161544608a.out然后,在删除静态变量“i”的初始化后,我的代码变成了,includeintmain(void){
这可能是一个较旧的查询,但到目前为止我找不到任何满意的答案。为了检查文件的内存映射,我编写了一个小的hello程序。#include#includeintmain(void){printf("Hello\n");return0;}编译后,当我在其目标文件上使用命令size时,我得到:#sizehellotextdatabssdechexfilename1133492161641669hello我也检查了其他文件的大小。我总是得到bss为16。bss是固定的吗?这是包含在数据中还是不在数据中。我的意思是这个16是否包含在492中。据我了解,bss是未初始化的数据段。
我正在尝试学习C程序的可执行文件的结构。我的环境是GCC和64位Intel处理器。考虑以下C代码a.cc。#include#includeintx;intmain(){printf("%d\n",sizeof(x));return10;}size-oa显示textdatabssdechexfilename11345528169469ea在我添加了另一个初始化的全局变量y之后。inty=10;a的大小显示(其中a是来自a.cc的可执行文件的名称)textdatabssdechexfilename11345561217026a6a正如我们所知,BSS部分存储未初始化的全局变量的大小,DAT
我在linux系统(确切地说是centos5.4)上的C程序中在运行时生成x86-64代码。我将字节码生成到全局数组中,如下所示charprogram[1024*1024]__attribute__((aligned(16)));然后通过函数指针调用它。我的问题是,当我这样编译程序时gcc-std=gnu99parse.c-oparse-lm我得到一个SIGSEGV,我推测这是由于bss部分未设置为可执行文件,如pmap所示00000000006010004Krw---/data/work/tmp/parse00000000006020001024Krw---[anon]当我这样编译时
我所知道的是,全局变量和静态变量都存放在.data段中,未初始化的数据存放在.bss段中。我不明白的是为什么我们有未初始化变量的专用段?如果未初始化的变量在运行时分配了值,该变量是否仍仅存在于.bss段中?在下面的程序中,a在.data段中,b在.bss中>段;那是对的吗?如果我的理解有误,请纠正我。#include#includeinta[10]={1,2,3,4,5,6,7,8,9};intb[20];/*Uninitialized,sointhe.bssandwillnotoccupyspacefor20*sizeof(int)*/intmain(){;}另外,请考虑以下程序,#
如果我理解正确,ELF文件中的.bss部分用于为零初始化变量分配空间。我们的工具链生成ELF文件,因此我的问题是:.bss部分实际上是否必须包含所有这些零?这似乎是一种可怕的空间浪费,例如,当我分配一个全局10兆字节的数组时,它会在ELF文件中产生10兆字节的零。我在这里看错了什么? 最佳答案 自从我与ELF合作以来已经有一段时间了。但我想我仍然记得这些东西。不,它实际上不包含那些零。如果你查看一个ELF文件程序头,你会看到每个头都有两个数字:一个是文件的大小。另一个是该部分在虚拟内存中分配时的大小(readelf-l./a.out
如果我理解正确,ELF文件中的.bss部分用于为零初始化变量分配空间。我们的工具链生成ELF文件,因此我的问题是:.bss部分实际上是否必须包含所有这些零?这似乎是一种可怕的空间浪费,例如,当我分配一个全局10兆字节的数组时,它会在ELF文件中产生10兆字节的零。我在这里看错了什么? 最佳答案 自从我与ELF合作以来已经有一段时间了。但我想我仍然记得这些东西。不,它实际上不包含那些零。如果你查看一个ELF文件程序头,你会看到每个头都有两个数字:一个是文件的大小。另一个是该部分在虚拟内存中分配时的大小(readelf-l./a.out
#NodeMCU##PlatformIO#或#ArduinoIDE#能规避lvgl+TFT_eSPI经典编译错误(如下所示)的点不多。Linking.pio\build\nodemcu\firmware.elfld.exe:address0x3fffd538of.pio\build\nodemcu\firmware.elfsection`.bss'isnotwithinregion`dram0_0_seg'collect2.exe:error:ldreturned1exitstatus***[.pio\build\nodemcu\firmware.elf]Error1因为我们在源码上能做的事情
#NodeMCU##PlatformIO#或#ArduinoIDE#能规避lvgl+TFT_eSPI经典编译错误(如下所示)的点不多。Linking.pio\build\nodemcu\firmware.elfld.exe:address0x3fffd538of.pio\build\nodemcu\firmware.elfsection`.bss'isnotwithinregion`dram0_0_seg'collect2.exe:error:ldreturned1exitstatus***[.pio\build\nodemcu\firmware.elf]Error1因为我们在源码上能做的事情