内存段-BSS、堆栈、堆、数据、代码/文本(还有吗?)。假设我有一个128MB的RAM,谁能告诉我:为每个内存段分配了多少内存?他们从哪里开始?请指定地址范围或类似内容以更清楚。哪些因素影响应该从哪里开始? 最佳答案 这个问题取决于使用的变量数量。由于您没有指定什么编译器或语言甚至操作系统,因此很难确定!这一切都取决于负责应用程序内存管理的操作系统。总之,这个问题没有明确的答案,想想这个,编译器/链接器在运行时,请求操作系统分配一block内存,那个分配取决于有多少变量,有多大,变量的范围和用途。例如,这个简单的C程序,在一个名为s
我遇到了size命令,它给出了ELF文件的部分大小。在玩弄它的同时,我为最简单的C++程序创建了一个输出文件:intmain(){return0;}显然,我没有定义任何已初始化或未初始化的数据,那么为什么我的BSS和DATA部分的大小为512和8个字节?我认为可能是因为intmain(),我尝试为以下C程序创建目标文件:voidmain(){}对于BSS和DATA部分,我仍然没有得到0。是因为为这些部分分配了某个最小大小的内存吗?编辑-我认为这可能是因为链接库,但我的对象是动态链接的,所以可能不应该是问题 最佳答案 intmain(
我遇到了size命令,它给出了ELF文件的部分大小。在玩弄它的同时,我为最简单的C++程序创建了一个输出文件:intmain(){return0;}显然,我没有定义任何已初始化或未初始化的数据,那么为什么我的BSS和DATA部分的大小为512和8个字节?我认为可能是因为intmain(),我尝试为以下C程序创建目标文件:voidmain(){}对于BSS和DATA部分,我仍然没有得到0。是因为为这些部分分配了某个最小大小的内存吗?编辑-我认为这可能是因为链接库,但我的对象是动态链接的,所以可能不应该是问题 最佳答案 intmain(
已知.bss段没有存储在磁盘中,但内存中的.bss段应该初始化为零。但它应该在内存中的哪个位置?是否有任何信息显示在ELFheader或.bss部分是否可能出现在数据部分旁边,或其他内容?? 最佳答案 BSS位于数据和堆之间,详见thismarvelousarticle.您可以使用size找出每个部分的大小:cnicutar@lemon:~$sizetrytextdatabssdechexfilename1108496161620654try 关于c-ELF文件的.bss部分应该在哪里占
已知.bss段没有存储在磁盘中,但内存中的.bss段应该初始化为零。但它应该在内存中的哪个位置?是否有任何信息显示在ELFheader或.bss部分是否可能出现在数据部分旁边,或其他内容?? 最佳答案 BSS位于数据和堆之间,详见thismarvelousarticle.您可以使用size找出每个部分的大小:cnicutar@lemon:~$sizetrytextdatabssdechexfilename1108496161620654try 关于c-ELF文件的.bss部分应该在哪里占
在C++中,我们都知道数组可以作为局部变量位于“main”范围内:intmain(){intarr[10000];//onthestack,sizecan'tbeverylarge....}或者作为全局变量离开“主”范围:intarr[10000000];//onBSS,siecanbeverylargeintmain{....}但我想要更多解决这个问题。数组的最大大小是多少?我的意思是确切的值(value)。什么会限制最大大小,对于堆栈,我认为答案是创建线程时的堆栈。但是对于BSS,我真的不知道它到底是什么,什么会限制它的大小,它是与线程(就像堆栈)还是应用程序(像堆)相关?
我正在使用自定义构建系统(在VisualStudio之外)构建DLL,但我无法让未初始化的数据显示在.bss部分中;编译器将其合并到.data中。这会膨胀最终的二进制大小,因为它充满了巨大的零数组。例如(示例中的1KB小数组,但实际缓冲区要大得多):intuninitialized[1024];intinitialized[1024]={123};编译器像这样发出程序集:PUBLIC_initialized_DATASEGMENTCOMM_uninitialized:DWORD:0400H_initializedDD07bHORG$+4092_DATAENDS最终在目标文件中是这样的:
我从size命令得到了意外的输出。Afaik初始化存储在data段中的全局和静态变量,未初始化并初始化为0个存储在bss段中的全局/静态变量。printf("%d",sizeof(int));给出int大小4。但是,bss和data段没有相应地增加到4。#includeintmain(){return0;}C:\ProgramFiles(x86)\Dev-Cpp\MinGW64\bin>sizememory-layout.exetextdatabssdechexfilename1004422922512148483a00memory-layout.exe#includeintg;//u
据我所知,c程序的分割是:Highaddress|---------------------------||env/cmdlineargsvars||---------------------------||stacksegment|-->uninitializedautovars|---------------------------||---------------------------||---------------------------||heapsegment|-->dynamicallocatedmemory|---------------------------||
我在这方面绝对是新手,但在类里面,老师给了我们他写的文件,让我们运行它,然后它工作得很好,但是当我尝试在家里做它时(我在VirtualBox上使用Linux)并使用:nasm-felf64hello.asm-ohello.ogcchello.o-ohello我收到错误“创建共享库时不能使用针对`.bss'的重定位R_X86_64_32S;使用-fPIC重新编译”。有人可以解释一下如何使它工作吗?globalmainexternprintfsection.datanapis:db'Helloworld!-poraz%ld',10,0liczba_iteracji:equ5section.