当前位置:首页 » 编程软件 » 编译bss

编译bss

发布时间: 2022-08-04 22:09:24

编译器编译高级语言为低级语言的时候,给全局变量或静态变量是如何分配内存的

对于C和C++的编译器,全局变量和静态变量都是在专门的数据区保存的,更具体一点,一般是在.data和.bss段保存的,具体在哪个段,编译器会根据代码中是否对这些变量进行了初始化来决定,如果初始化过,并且初始化的值不为0,那么这个这个变量一般就会被放在编译结果的.data段中,否则就是放在.bss段中。
.data段中就保存变量的符号,还保存变量的初始化值,而在.bss段中,只保存变量的符号,而不保存值,这是因为这部分的变量都将被初始化为0,这也是为什么static声明的变量即使没有初始化也会是0的原因。
这些段都会在程序被执行的时候由操作系统(或链接器)加载到指定的内存中,便完成相应的初始化。

❷ mac book pro下如何编译和运行汇编程

汇编程序由定义好的段构成,每个段都有不同的目的,三个最常用的段:

1)data 段

汇编程序data(数据)段是可选的。

数据段声明带有初始值的数据元素,这些数据元素用作汇编程序的变量。

2)bss 段

汇编程序bss段 是可选的。

bss段声明使用零(或 NULL)值初始化的数据元素。这些元素最常用作汇编程序中的缓冲区

3)text 段

汇编程序必须有 text(文本)段。

这个段是 在可执行程序内声明指令码 的地方。

定义段:

GNU汇编器使用 .section 命令语句声明段。

.section 语句只使用一个参数------它声明的段的类型

❸ BSS的基本介绍

是“Block Started by Symbol”的缩写,意为“以符号开始的块”。
BSS是Unix链接器产生的未初始化数据段。其他的段分别是包含程序代码的“text”段和包含已初始化数据的“data”段。BSS段的变量只有名称和大小却没有值。此名后来被许多文件格式使用,包括PE。“以符号开始的块”指的是编译器处理未初始化数据的地方。BSS节不包含任何数据,只是简单的维护开始和结束的地址,以便内存区能在运行时被有效地清零。BSS节在应用程序的二进制映象文件中并不存在。

❹ DSP编译显示 cannot allocate bss in SARAM 怎么回事

SARAM的尺寸放不下未初始化段,bss是为程序中的不需要初始值的变量申请空间的段,具体可以参看编译生成的.map文件,编译的.cmd文件中bss段实际尺寸、bss段放置位置,和SARAM中实际剩余空间尺寸。

❺ 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段不在可执行文件中,由系统初始化。

❻ 静态编译 64位系统 Bss段大小最大是多少

39KB。
在BSS段,则可执行文件将开辟一个10000大小的空间,并全部存储为0,int为4字节的情况下,该变量将在磁盘上占用39KB的空间。但是此时若是存在BSS段,则在可执行文件中,将只是记录现在的BSS段总大小为40000即可,而无需真正的占据39KB的空间。

静态编译,就是编译器在编译可执行文件的时候,将可执行文件需要调用的对应静态库(.a或.lib)中的部分提取出来,链接到可执行文件中去,使可执行文件在运行的时候不依赖于动态链接库。

❼ 编译时分配内存和运行时分配内存

编译其实只是一个扫描过程,进行词法语法检查,代码优化而已,编译程序越好,程序运行的时候越高效。
我想你说的“编译时分配内存”是指“编译时赋初值”,它只是形成一个文本,检查无错误,并没有分配内存空间。

当你运行时,系统才把程序导入内存。一个进程(即运行中的程序)在主要包括以下五个分区:
栈、堆、bss、data、code

代码(编译后的二进制代码)放在code区,代码中生成的各种变量、常量按不同类型分别存放在其它四个区。系统依照代码顺序执行,然后依照代码方案改变或调用数据,这就是一个程序的运行过程。

❽ 结构体定义编译后是放在哪里的 BSS段、数据段、代码段、堆还是栈

只是自己定义了一个结构体类型,如果不定义变量,编译后代码 当然在代码段;如果定义了结构体变量,则这个变量放在数据段。
举个例子,
struct aa
{
int a;
char b;
};//这里只是声明,当然编译后在代码段

你定义变量时候
int a;//系统预定义的整型,a在数据段
struct aa number;//number算是结构体类型aa,也在数据段,只是类型不是预定义而已。

ps:纯手工,加分~
有问题,q我,270495267

❾ 编译时分配内存和运行时分配内存的理解,麻烦讲解下

编译时无所谓分配内存,程序在加载后才占用内存,不知道你说的是不是说编译生成的目标文件所占的空间,目标文件里的各个段.bss .data .text等都要占据一定空间,而运行时随时都在分配内存,堆栈都是内存。

不管是局部的还是全局静态变量,都会占用目标文件的空间,但是也可以不初始化,不初始化的保存在.bss段,初始化的保存在.data段。

热点内容
淘宝上传时间 发布:2025-02-09 02:42:13 浏览:637
ios缓存数据 发布:2025-02-09 02:32:06 浏览:253
苹果手机如何存储word 发布:2025-02-09 02:23:02 浏览:780
安卓手机如何有苹果的emoji 发布:2025-02-09 02:11:02 浏览:808
编译原理已知语言求文法习题 发布:2025-02-09 02:05:15 浏览:132
中国首个具有世界影响力的编译器 发布:2025-02-09 01:56:21 浏览:720
tomcat上传超时 发布:2025-02-09 01:41:42 浏览:484
androidactivity竖屏 发布:2025-02-09 01:41:40 浏览:378
家庭配置怎么合理 发布:2025-02-09 01:36:14 浏览:808
头条军事源码 发布:2025-02-09 01:31:53 浏览:998