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

如何获得二进制文件中每个符号的实际大小影响?

获得二进制文件中每个符号的实际大小影响可以通过以下几个方面进行分析:

  1. 编程语言和编译器:不同的编程语言和编译器对于符号的处理方式不同,会影响符号的大小。例如,C语言中的结构体会根据对齐规则进行内存对齐,而C++语言中的虚函数表会增加额外的开销。
  2. 数据类型和对齐:不同的数据类型在内存中占用的空间大小不同,而且编译器会根据对齐规则对数据进行对齐,以提高访问效率。因此,使用不同的数据类型和对齐方式会影响符号的大小。
  3. 优化选项:编译器提供了一些优化选项,可以对代码进行优化,包括减小符号的大小。例如,可以使用优化选项来删除未使用的符号、合并相同的符号等。
  4. 编译参数:编译参数也会对符号的大小产生影响。例如,使用不同的优化级别、调试信息的开启与关闭、链接器的参数等都会影响符号的大小。
  5. 库的使用:使用不同的库会影响符号的大小。一些库可能会引入额外的依赖和功能,从而增加符号的大小。
  6. 程序的逻辑结构:程序的逻辑结构也会对符号的大小产生影响。例如,使用不同的数据结构、算法等都会影响符号的大小。

总结起来,获得二进制文件中每个符号的实际大小影响是一个综合性的问题,需要考虑编程语言、编译器、数据类型、对齐方式、优化选项、编译参数、库的使用和程序的逻辑结构等多个方面的因素。具体的影响因素会根据具体的情况而有所不同。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Java 如何获得一个文件文件大小

有时候我们需要知道一个文件大小。 我们可以使用一些方法,比如说将文件读取成 InputStream,然后再使用 available() 获得长度就可以了。...我们也可以使用 FileUtils 来获得。 使用方法是: FileUtils.sizeOf(localFileCache) localFileCache 定义文件对象。...关于 sizeOf 使用为:返回指定文件或者文件大小。如果你 File 对象为一个文件的话,这个方法将会返回文件大小。...如果你 File 对象为一个目录的话,那么上面的方法将会返回这个文件大小。这个文件大小将会包含这个文件夹中所有子文件内容。换句话说,这个方法是进行递归大小查询。...但是,如果一个文件夹或者子文件夹有安全限制,不允许访问的话,那么这个方法将不会将上面的文件内容进行计算。 https://www.ossez.com/t/java/620

2.5K10

Java Unit 测试如何获得 resources 文件

假定我们有一个文件位于:src/test/resources/data/azure_storage.json 目录。...azure_storage.json 为数据文件,我们希望将这个文件内容读取到测试类。...在数据初始化时候,我们使用下面的代码: InputStream inputStream = loader.getResourceAsStream(fileName); 先将资源文件数据读取为 InputStream...,这个时候你数据已经在内存中了,我们在上面的代码中使用代码 FileUtils.copyInputStreamToFile 来将内存数据写到一个临时目录,然后你就可以对文件进行操作了。...使用这样配置好处就是在测试时候,因为不同的人使用系统是不同,不同测试文件路径会导致没有办法进行路径同步。

2.5K30
  • 如何在 Java 读取处理超过内存大小文件

    读取文件内容,然后进行处理,在Java我们通常利用 Files 类方法,将可以文件内容加载到内存,并流顺利地进行处理。但是,在一些场景下,我们需要处理文件可能比我们机器所拥有的内存要大。...此时,我们则需要采用另一种策略:部分读取它,并具有其他结构来仅编译所需数据。 接下来,我们就来说说这一场景:当遇到大文件,无法一次载入内存时候要如何处理。...但是,要包含在报告,服务必须在提供每个日志文件至少有一个条目。简而言之,一项服务必须每天使用才有资格包含在报告。...使用所有文件唯一服务名称创建字符串列表。 生成所有服务统计信息列表,将文件数据组织到结构化地图中。 筛选统计信息,获取排名前 10 服务调用。 打印结果。...这里关键特征是lines方法是惰性,这意味着它不会立即读取整个文件;相反,它会在流被消耗时读取文件。 toLogLine 方法将每个字符串文件行转换为具有用于访问日志行信息属性对象。

    18610

    二进制日志和文件系统是如何影响MySQL性能(译自Percona)

    MySQL性能影响,特别是在 MySQL 8.0 启用默认二进制日志情况下。...使用 80GB、70GB 和 60GB innodb_buffer_pool_size来模拟不同 IO 负载,并评估这对二进制日志写入影响。...原因是二进制日志文件 (max_binlog_size) 大小有限制,即 1GB。当达到1GB限制时,MySQL会执行二进制日志轮换。...因为使用 sync_binlog=0 ,以前对二进制日志所有写入都缓存在操作系统缓存,在二进制轮换时,MySQL 强制同步刷新所有的更新到磁盘,这导致每 40 秒应用完全停止一次,40秒是在上述测试填满...我们该如何解决这个问题?显而易见解决方案是更频繁地进行二进制日志同步写入,这可以通过将sync_binlog设置为>0来实现。

    58920

    在.net项目中生成pdb(程序数据文件)是什么文件

    这些符号本来可以很容易地嵌入到二进制文件,但反过来又会使二进制文件大小变得更大(有时是几兆字节)。...为了减少文件大小,现代编译器和早期大型机调试系统将符号信息输出到一个单独文件,对于Microsoft编译器,这个文件称为.PDB文件。 PDB文件包含什么?...pdbonly:调试符号只能在PDB文件,而不是二进制文件。 Full:与PDB二进制符号一起也包含一些调试符号。 Full是Visual Studio设置默认选项。...参考MSDN文档: 如果您使用/调试:full,请注意,JIT优化代码速度和大小会受到一定影响,并且对代码质量影响很小。我们建议/调试:pdbonly或没有PDB来生成发布代码。 ?...我们可以使用symstore.exe设置自己符号服务器,它允许调试器找到与二进制相关实际PDB。symstore.exe包含在窗口包调试工具

    1.7K30

    今日头条 iOS 安装包大小优化 - 新阶段、新实践

    [image] 在 Build Settings 打开 LD_GENERATE_MAP_FILE 开关,构建 App 过程中就会生成一个名叫 Link Map txt 文件,它能展示每个段、每个节...、每个函数在 Mach-O 分布和大小。...动态链接器 dyld 在做符号绑定时,会读取被绑定动态库或可执行文件 Export Info 信息,得到一个符号对应实际调用地址。...对象类型属性使用关联对象方式存取,基础类型属性使用额外生成 IVAR 存取。 这一优化获得了 800KB 大小收益,并且评估对读写性能影响损耗可以接受。...3.6、二进制段压缩 Mach-O 文件占据了 Install Size 很大一部分比例,但并不是文件每个段/节在程序启动第一时间都要被用到。

    1.9K00

    C++静态链接

    API更关注源代码层面的,比如POSIX规定 printf(0)个函数原型,它能保证这个函数定义在所有遵循POSⅨ标准系统之间都是一样,但是它不保证print 实际每个系统执行时,是否按照从右到左将参数压入堆栈...,参数在堆栈如何分布等这些实际运行时二进制级别的问題。...、编译器、链接器、操作系统等都会影响ABI 影响ABI因素非常多,硬件、编程语言、编译器、链接器、操作系统等都会影响ABI我们可以从C语言角度来看一个编程语言是如何影响ABI。...对于C语言目标代码来说,以下几个方面会决定目标文件之间是否二进制兼容: 内置类型(如int、float、char等)大小和在存储器放置方式(大小端、对齐方式); 组合类型(如 struct、 union...外部符号( external-linkage)与用户定义符号之间命名方式和解析方式,如函数名func在C语言目标文件是否被解析成外部符号func。

    1.7K10

    09-2 读取、写入和执行

    所有的符号链接文件显示都是伪权限属性。真正权限属性由符号链接所指向实际文件决定。 d rwx rwx --- 目录文件。...八进制数字表示法:指的是使用八进制数字来设置所期望权限。 因为每个八进制数字对应着 3 个二进制数字,所以这种对应关系正好可以和用来存储文件模式结构方式一一映射。...为了理解它是如何实现,先来看看八进制数,若把该掩码展开成二进制形式,然后再与属性进行对比,就会明白: 原始文件模式 --- rw- rw- rw- 掩码 000 000 000 010 结果 --...掩码二进制数值每个出现 1 位置,其对应属性都被取消。...,二进制数值每个出现 1 位置,其对应属性都被取消。

    1.3K20

    (23)恶意代码作者溯源(去匿名化)经典论文阅读:二进制和源代码对比

    关键点:经过分解和反编译获得特征向量如何来预测源代码特征,如何重构二进制代码编程风格特征(指纹) N. Rosenblum, X. Zhu, and B. Miller....按照Rosenblum方法从可执行二进制中提取原始指令轨迹,同时反汇编程序会提供符号信息以及代码引用字符串,再从反汇编器获得函数控制流图,提供基于程序基本块特征。...程序员风格会以令人惊讶程度嵌入到可执行二进制文件,即使它被混淆、编译器优化或符号被剥离降低了风格分析准确性,但在仍能应用于程序员去匿名化任务。...个人认为,相比于模型新旧,安全论文更看重模型如何解决实际问题以及是否贴合创新。...如何解决代码混淆、编译优化等溯源问题,包括二进制溯源、多作者溯源等 在特征工程如何构建更好地降维方法识别更关键特征,并提高作者溯源可解释性(tanE) 如何实际安全问题结合,包括APT溯源、无文件攻击溯源等

    88320

    Karta:一款功能强大IDA源代码辅助插件

    该插件使用了一种独特技术,使其能够支持大型二进制文件(>200000个函数),而同时几乎不会影响整体性能。...Karta所使用匹配算法是位置驱动,这意味着它主要焦点是定位不同编译文件,并根据文件原始顺序匹配每个文件函数。...这种匹配方式依赖于开源函数数量K,而不是二进制文件大小N,因此可以实现显著性能提升。...,以及从过去开源代码获得经验教训 docs:Sphinx文档目录 Karta识别器 Karta识别器是一个较小插件,用于标识二进制文件现有(受支持)开源库积起版本。...编译后,Karta将自动尝试在加载二进制文件匹配开源代码库函数或符号

    1.1K30

    【C语言加油站】数据在内存存储

    而无符号整数所对应二进制形式只有一种——通过数值进制运算获取二进制序列。我们可以将其理解为在无符号整数,其二进制位都是数值位,不存在符号位。...2.2 三种形式之间相互转换 在有符号正整数其数值所对应三种二进制形式是相等,即: ,因此我们通过进制转换获取到数值所对应原码时,同时也获得了其对应反码与补码。...三、大小端字节序与字节序判断 现在我们已经知道了对于无符号整型数据而言,它们在内存是直接以二进制形式进行存储,而对于有符号整型而言,它们在内存则是以补码形式进行存储。...如下所示: 这里我们展示是正浮点数取值访问,对于浮点数而言,它在不同条件下取值范围都被整合在了该头文件,有兴趣朋友可以对照头文件内容来尝试打印不同条件下浮点数取值范围,头文件网址给大家奉上...: 0100 0000 1010 0000 0000 0000 0000 0000 所对应整型值则是 ,可以看到获得整型值是一个远大于5值,为了验证我们分析正确性,接下来我们借助计算机来计算一下该值大小

    11410

    【Rust日报】2024-02-19 Linux 内核准备升级至 Rust 1.77

    原文链接 https://www.phoronix.com/news/Linux-Kernel-To-Rust-1.77 极小 Rust 二进制文件 本文探索如何制作一个极小 x86_64 Linux...从一个大小为 3.6 MiB 起点开始,通过优化和调整,逐步减小二进制文件大小。优化手段包括去除符号、调整编译参数、替换标准库等。...通过去除标准库并直接使用 libc,以及自定义 _start 函数,极大地减小了二进制文件大小。...最终通过调整链接器标志和移除不必要 ELF sections,将二进制文件大小降至 400 bytes,达到了极小化目标。...Rust 展现出了出色系统编程能力,即使在 no_std 环境下也能进行嵌入式编程和其他应用领域。Rust 在性能和体积上优势使其在实际应用具有广泛潜力,甚至可以取代一些汇编编写程序。

    28310

    【Rust 漫画】揭开 Hello World 二进制文件巨大之谜

    你可能看到二进制文件大小高达 4 MB ,而 cpp Hello world 二进制文件才 170kb,相比之下,Rust 二进制文件大小就太大了。...静态链接影响:尽管 Rust 进行了死代码消除,但静态链接仍然可能会导致较大二进制文件,因为所有必要代码都被包含在单个文件。这与动态链接相反,其中二进制文件依赖于外部共享库。...其他因素:除了标准库和你代码,还有其他因素可能影响编译输出大小,例如调试信息、优化等级等。 那么该如何优化编译大小呢?...使用strip命令:strip是一个可以移除二进制文件符号信息工具,进一步减小文件大小。 其他优化工具和策略:例如,使用upx可以进一步压缩生成二进制文件。...最终效果还是可以。 后记 Rust 编译时间、编译文件大小和性能优化,也一个不可能三角,需要根据实际情况和需求进行权衡。

    80520

    SystemVerilog(五)-文本值

    X表示多驱动器电路未初始化值、不确定值或值冲突。在某些RTL模型上下文中,综合编译器将X值视为不关心值。 0、1和Z值是实际可能存在抽象。 X值不是实际硅值。...这些特点是: 值位宽度(向量大小) 值符号性(有符号或无符号) 值基数(也称为基数) 2-state or 4-state value 这些特征影响操作和赋值。...任何或所有位可以是X或Z) 二进制每个位可以是0、l、X或Z;八进制值每个3位组可以是0~7、X或Z;十进制值每个位可以是0~9、X或Z;十六进制值每个4位组可以是0~9、a~F、X或Z。...这些大小不匹配警告消息可能会隐藏其他需要注意消息。使用显式大小文本值将防止大小不匹配警告。 最佳做法准则3-1 在RTL模型仅使用二进制和十六进制文本整数。...在数字添加一个下划线有助于使长数字更具可读性,尤其是二进制值-下划线也可用于显示值子字段, 向量填充文本值 SystemVerilog提供了一种特殊形式大小文本整数,它将任何大小向量所有位设置为

    1.2K30

    C 不再是一种编程语言

    它意味着以C头文件形式获得接口类型和功能描述,并以某种方式: 匹配这些类型布局 用链接器做一些事情,将函数符号解析为指针 用适当ABI来调用这些函数(比如把args放在正确寄存器) 那么,...即使C编译器告诉了你类型和如何理解注释,但实际上你仍然不知道所有内容大小/对齐/惯例。那如何与这些乱七八糟东西进行互操作呢?Aria提供了两种选择。...但是你仍然有一个兼容性问题:任何用新头文件编译的人都不能与库旧版本进行链接,库V1版本根本没有V2符号!因此,如果你想获得热门新功能,你就要接受与旧系统不兼容。...如果他们需要在最后增加更多字段,那也没关系,因为旧版本可以使用这个值来检测头“版本”,也可以跳过任何他们不知道字段。 SizeOfDescriptor是数组每个元素大小。...,而且它是一种序列化二进制文件格式。

    68530

    C 不再是一种编程语言

    它意味着以C头文件形式获得接口类型和功能描述,并以某种方式: 匹配这些类型布局 用链接器做一些事情,将函数符号解析为指针 用适当ABI来调用这些函数(比如把args放在正确寄存器) 那么,...即使C编译器告诉了你类型和如何理解注释,但实际上你仍然不知道所有内容大小/对齐/惯例。那如何与这些乱七八糟东西进行互操作呢?Aria提供了两种选择。...但是你仍然有一个兼容性问题:任何用新头文件编译的人都不能与库旧版本进行链接,库V1版本根本没有V2符号!因此,如果你想获得热门新功能,你就要接受与旧系统不兼容。...如果他们需要在最后增加更多字段,那也没关系,因为旧版本可以使用这个值来检测头“版本”,也可以跳过任何他们不知道字段。 SizeOfDescriptor是数组每个元素大小。...,而且它是一种序列化二进制文件格式。

    75710

    iOS 优化 - 瘦身

    Apple __TEXT 段大小限制: iOS 7 之前,二进制文件中所有的 __TEXT 段总和不得超过 80 MB; iOS 7.X 至 iOS 8.X,二进制文件每个特定架构 __TEXT...该文主要研究如何降低 APP 下载大小,因为文章篇幅较长,如果大家不想细读,可以直接跳过细节展开看每个小节结论部分。...去除符号信息 可执行文件符号是指程序所有的变量、类、函数、枚举、变量和地址映射关系,以及一些在调试时候使用到用于定位代码在源码位置调试符号符号和断点定位以及堆栈符号化有很重要关系。...Link Map 是编译链接时可以生成一个 txt 文件,它生成目的就是帮助程序员分析包大小。Link Map 记录了每个方法在当前二进制架构下占据空间。...二进制段压缩:Mach-O 文件并不是每个段 / 节在程序启动第一时间都要被用到。

    2.5K20

    《深入理解计算机系统》(CSAPP)读书笔记 —— 第七章 链接

    在目标文件这个节不占据实际空间,它仅仅是一个占位符。目标文件格式区分已初始化和未初始化变量是为了空间效率:在目标文件,未初始化变量不需要占据任何实际磁盘空间。...实际上,每个可重定位目标文件在. symtab中都有一张符号表(除非程序员特意用 STRIP命令去掉它)。然而,和编译器符号表不同, symtab符号表不包含局部变量条目。...此时,链接器就知道它输入目标模块代码节和数据节的确切大小。现在就可以开始重定位步骤了,在这个步骤,将合并输入模块,并为每个符号分配运行时地址。重定位由两步组成: 重定位节和符号定义。...链接器处理称为目标文件二进制文件,它有3种不同形式:可重定位、可执行和共享。可重定位目标文件由静态链接器合并成一个可执行目标文件,它可以加载到内存并执行。...链接器两个主要任务是符号解析和重定位,符号解析将目标文件每个全局符号都绑定到一个唯一定义,而重定位确定每个符号最终内存地址,并修改对那些目标的引用。

    2.6K31
    领券