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

如何找到一个对象文件*.o的内存使用情况(.bss .text .rodata .data)?

要找到一个对象文件的内存使用情况,可以使用一些工具和技术来实现。下面是一种常见的方法:

  1. 使用工具:可以使用GNU Binutils工具集中的objdump命令来查看对象文件的内存使用情况。objdump是一个功能强大的工具,可以用于分析和显示二进制文件的内容。
  2. 执行命令:在命令行中执行以下命令来查看对象文件的内存使用情况:
  3. 执行命令:在命令行中执行以下命令来查看对象文件的内存使用情况:
  4. 其中,<object_file.o>是你要查看的对象文件的文件名。
  5. 分析结果:objdump命令会输出对象文件的各个节(section)的详细信息,包括节的名称、大小、起始地址等。你可以查看各个节的大小来了解对象文件的内存使用情况。
    • .bss节:存储未初始化的全局变量和静态变量,大小为0。
    • .text节:存储程序的可执行代码,包括函数和指令,大小取决于代码的复杂性。
    • .rodata节:存储只读数据,如字符串常量,大小取决于程序中使用的只读数据量。
    • .data节:存储已初始化的全局变量和静态变量,大小取决于变量的数量和大小。
  • 相关产品和链接:
    • 腾讯云产品:腾讯云提供了一系列云计算产品,如云服务器、云数据库、云存储等,可以帮助用户构建和管理云计算环境。你可以访问腾讯云官方网站了解更多产品信息:腾讯云
    • 注意:根据要求,本回答不包含其他云计算品牌商的信息。
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

9_重定位

,它规定如何把输入文件段放入输出文件, 并控制输出文件各部分在程序地址空间内布局。 ​....text之后,包含所有链接文件只读数据段 12 13 . = ALIGN(4); 14 .data : { *(.data) } //.data存放在.rodata之后,包含所有链接文件只读数据段...当程序运行涉及到bss段上数据时,CPU会从bss段对应内存地址去读取对应值,为了确保从这段内存地址上读取到bss段数值为0,在程序运行前需要将这一段内存地址上数据清零,即清除bss段。 ​...9.3.2 汇编重定位data段 ​ 下面我们将通过一个实例来说明为什么要重定位data段以及如何通过汇编重定位data段。 ​...@A ​ 在程序运行时,CPU需要不断地访问DDR3内存来获取g_charA值,访问DDR3会花费大量时间,那么如何提升访问效率呢? ​

93010

makefile使用.lds链接脚本以及 @,^, $,< 解析

.o文件时,这时候.lds链接脚本 又该如何安排它们在可执行文件顺序?...这里就需要将多个目标文件.text、.data和.bss等段链接在一起而链接脚本文件是告诉链接器从什么地址开始放置这些段 .text:代码段,存放程序执行代码一块内存 .data:读/写数据段,存放已初始全局变量或静态变量一块内存...SECTIONS :最重要,最基本,也是最主要命令,它告诉链接器如何把输入文件各个section输出到目标文件各个section中去。...),将所有的.rodata只读数据段合并成一个.rodata只读数据段      . = ALIGN(4);    .data : { *(.data) }            //指定读写数据段,    ...*(data):添加所有文件数据段     . = ALIGN(4);    .got : { *(.got) }              //指定got段,got段是uboot自定义一个

73320

makefile使用.lds链接脚本以及 $@ ,$^, $,< 解析

,这时候.lds链接脚本 又该如何安排它们在可执行文件顺序?...这里就需要将多个目标文件.text、.data和.bss等段链接在一起而链接脚本文件是告诉链接器从什么地址开始放置这些段 .text:代码段,存放程序执行代码一块内存 .data:读/写数据段,存放已初始全局变量或静态变量一块内存...SECTIONS :最重要,最基本,也是最主要命令,它告诉链接器如何把输入文件各个section输出到目标文件各个section中去。...(4); .rodata : { *(.rodata) } //指定.rodata section段(位于0x00000000+.text section),将所有的.rodata只读数据段合并成一个....rodata只读数据段 . = ALIGN(4); .data : { *(.data) } //指定读写数据段, *(data):添加所有文件数据段 .

1.9K100

makefile使用.lds链接脚本以及 常用命令 解析

当有多个.o文件时,这时候.lds链接脚本 又该如何安排它们在可执行文件顺序?   ...这里就需要将多个目标文件.text、.data和.bss等段链接在一起而链接脚本文件是告诉链接器从什么地址开始放置这些段 .text: 代码段,存放程序执行代码一块内存 .data: 读/写数据段...,存放已初始全局变量或静态变量一块内存 .rodata: 只读数据段,存放只读数据段,比如全局const变量和#define定义变量 .bss: 存放未初始化全局变量或静态变量,这里变量存放只是用来预留位置...section),将所有的.rodata只读数据段合并成一个.rodata只读数据段 . = ALIGN(4); .data : { *(.data) }...scripts/Makefile.modpost文件注释 中找到

1.8K20

apollo系列之apollo2 mcu开发(基础篇)之1.3-解析编译生成IAR中map文件

查看全部教程开发请点击:apollo系列汇总 查看本文全部文章请点击:apollo系列之apollo2 mcu开发(基础篇)之1.3-解析编译生成IAR中map文件 ================...==================================================================== \iar\bin中有*.map文件 一、map文件主信息 ##...Section(段)       Kind(种类) Address(地址)     Size(大小)  Object(编译后对象) 2..rodata:常量 3.text:代码段 4..bss:BSS...段(bss segment)通常是指用来存放程序中未初始化或者初始值为0全局变量一块内存区域。...BSS是英文Block Started by Symbol简称。BSS段属于静态内存分配。

82820

浅析C++内存布局

在vs2017中,并不能将常量字符串定义为char *p类型,否则会编译失败; .data data存储已经初始化全局变量,属于静态内存分配。...总结 1、执行文件中包含了textrodatadata内容,不包含bss段内容(一堆0放入执行文件没有意义) 2、堆和栈内存增长方向是相反:栈是从高地址向低地址生长,堆是从低地址向高地址生长...包括:代码指令是如何保存,库文件如何与应用程序代码静态链接,应用程序如何被装载到内存中并开始运行,动态链接如何实现,C/C++运行库工作原理,以及操作系统提供系统服务是如何被调用。...类对象所占内存空间  一个实例化对象所占空间大小? 注意不要说类大小,是类对象大小。 首先,类大小是什么?...4.程序运行时,通过父类指针或者引用 调用函数时,编译器会先找到对象虚函数指针,根据指针找到虚函数表,在虚函数表中找到对应函数入口 地址进行调用。

1.1K40

用GCC开发STM32入门二

然后链接脚本文件告知链接器,把所有目标文件相应段连接到一起,并把目标文件“变量地址”“函数地址”重定位至正确地址空间; 编写前需要知道C程序编译后典型内存布局 ,单片机启动流程以及链接脚本文件作用和编写等知识...上图中,正文对应是可执行代码.text和常量表格数据等.rodata,.data对应初始化了全局变量,编译后将位于可执行文件中,由启动代码负责加载 到数据区中(在单片机中这部分数据会存于flash...一般来说,目标文件包含 .text段: 可执行代码 .rodata段: 只读数据,对应程序中常量 .data段: 初始化全局变量 .bss段: 未初始化全局变量 连接器所作工作简单讲就是...,把所有目标文件相应段连接到一起,并把目标文件“变量地址”“函数地址”重定位至正确地址空间; 比如,对于stm32来说向量表,.text和.rodata就应该放到从0x0800 0000开始....; 这条语句把计数器“.”值赋给了变量_etext;“.”现在值就为.text尾部。 另,后面的.data、.bss、.stackarea部分可自行分析,原理一样。

1.8K20

扒一扒ELF文件

ELF文件类型 2.1 可重定位目标文件(.o文件) 2.2 可执行目标文件(a.out文件) 2.3 共享对象文件(.so文件) 3. ELF文件作用 4....链接举例   在介绍ELF文件之前,我们先看下,一个.c程序是如何变成可执行目标文件。下面举个例子。   该程序由main.c和sum.c两个模块组成。...data节和.bss节会被装入读写数据段。 段头表能够描述可执行文件节与虚拟空间中存储段之间映射关系。一个表项32B,说明虚拟地址空间中一个连续片段或一个特殊节。...Elf32_Word p_align; //此成员给出段在文件中和内存如何对齐。 } Elf32_phdr;   使用readelf命令查看某可执行目标文件程序头表。...3.bss段在可执行目标文件中不会有它空间,只有当可执行目标文件装载运行时,才会被分配内存(并且位于data内存块之后),并且初始化为0。 本文参考《深入理解计算机系统》

67920

程序一定要从main函数开始运行吗?

对于静态链接先提出两个问题: Q: 每个目标文件都有好多个段,目标文件在被链接成可执行文件时,输入目标文件各个段如何被合并到输出文件?...A: 合并相似的段,将所有的.text段合并到输出文件.text段,将所有的.data段合并到输出文件.data段。 Q: 链接器如何为他们分配在输出文件空间和地址?...UND类型,这种未定义符号都是因为该目标文件中有关于他们重定位项,在链接器扫描完所有的输入目标文件后,所有这种未定义符号都应该能在全局符号表中找到,否则报符号未定义错误。...$ nm -a test.o 0000000000000000 b .bss 0000000000000000 n .comment 0000000000000000 d .data 0000000000000000.../test hello 上面的tinytext一行是指将.text段、.data段、.rodata内容都合并到tinytext段中,使用readelf查看段信息。

1.2K30

用GCC开发STM32,正点原子开发板一个库函数版本例程示例

首先下载交叉编译环境GCC,这个网上有很多,百度一下就能找到下载。比如 Sourcery G++ for ARM EABI 我CSDN资源里,有相关下载。.../headers    Makefile中出现.h文件:如果不能再当前目录中找到,则到目录"../headers"下寻找. vpath与VPATH区别在于后者指定全局搜索路径 4....$@:代表规则中目标文件名:可以使用@-->at 代表目标的意思    $%:规则目标文件一个静态库文件时,代表静态库一个成员名.    $<:规则一个依赖文件名.   ...$(*D): 代表"茎"中目录部分    $(*F): 代表"茎"中文件名部分 6. find ./ -name'*~' | xargs rm -f    当你尝试用rm 删除太多文件,你可能得到一个错误信息...四、熟悉gcc编译 Gcc编译学习是一个长期过程,主要参考文档见安装目录下Documation中所有pdf和readme.txt。下面是简短学习笔记。 1.

1.4K20

认识目标文件结构

ELF Header .text .data .bss .rodata .comment .shstrtab section header table .symtab .strtab .rela.text...; (3).data,初始化数据段存放已初始化全局变量与局部静态变量; (4).bss,未初始化数据段存放未初始化全局变量与局部静态变量; (5).rodata,只读数据段存放程序中只读变量,...原因如下: (1)编译时,若目标文件中含有弱符号(比如未定义全局变量),则该弱符号最终所占内存空间大小无法确定,因为有可能其他目标文件中该弱符号所占内存空间比本单元弱符号所占内存空间大,所以此时无法在...比如 test.o .text、.data等; (4)局部符号。这类符号只在编译单元内部可见,链接器往往会忽略它们,因为没用。...11.代码段重定位表(.rela.text) 通过命令 readelf -S输出可以看到,test.o一个段 .rela.text,其类型为 RELA,也就是说它是一个重定位表,用于链接器在处理目标文件

1.1K30

STM32高级开发——链接器与启动文件

由此,我们就可以理解C语言被编译为二进制执行文件过程了,首先每个C文件都被编译为了.o,带有未解析地址中间文件,而后工具链链接器将所有C文件.o文件链接将他们有序排列到储存中,并将他们个个函数处地址解析使得其他不同地方函数能够跳转到该函数入口地址...,由此一个有序排列可被单片机执行文件便生成了。...这里就比较高深了,在51单片机中我们知道最后在生成代码后51单片机内存中会有如 code、xdata、data区段,来讲代码中执行部分、变量部分等分区块放置,而.ld就是一种链接器使用规则性文件,他告诉链接器单片机系统...*) /* .mb1text* sections (code) */ *(.mb1rodata) /* read-only data (constants) */...在我们实际工程建立及编写中,我们使用都是从别处找来ld文件,在样例工程中.ld文件只要在内存大小堆栈等位置上根据stm32具体型号稍作修改就可以使用了。

78530

嵌入式软件开发必知必会

BSS是英文Block Started by Symbol简称。BSS段属于静态内存分配。 数据段:数据段(data segment)通常是指用来存放程序中已初始化全局变量一块内存区域。...bss是不占用.exe文件空间,其内容由操作系统初始化(清零);而.data却需要占用,其内容由程序初始化,因此造成了上述情况。...bss段(未手动初始化数据)并不给该段数据分配空间,只是记录数据所需空间大小。data(已手动初始化数据)段则为数据分配空间,数据保存在目标文件中。数据段包含经过初始化全局变量以及它们值。...BSS大小从可执行文件中得到,然后链接器得到这个大小内存块,紧跟在数据段后面。当这个内存区进入程序地址空间后全部清零。包含数据段和BSS整个区段此时通常称为数据区。...: 17 { 18 test.o(.text); 19 *.o(.text); 20 } 21 //只读数据段 22 .rodata:{*(.rodata

90440
领券