gpt4 book ai didi

c++ - GCC函数填充值

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:17:30 24 4
gpt4 key购买 nike

每当我在启用优化的情况下编译 C 或 C++ 代码时,d GCC 都会将函数对齐到 16 字节边界(在 IA-32 上)。如果函数短于 16 个字节,GCC 会用一些字节填充它,这些字节似乎根本不是随机的:

19:   c3                      ret
1a: 8d b6 00 00 00 00 lea 0x0(%esi),%esi

它似乎总是 8d b6 00 00 00 00 ...8d 74 26 00

函数填充字节有什么意义吗?

最佳答案

填充是由汇编程序创建的,而不是由 gcc 创建的。它只看到一个 .align 指令(或等效指令),并不知道要填充的空间是在函数内部(例如循环对齐)还是函数之间,因此它必须插入 NOP 某种形式。现代 x86 汇编程序使用尽可能大的 NOP 操作码,目的是在填充用于循环对齐时花费尽可能少的周期。

就我个人而言,我非常怀疑将对齐作为一种优化技术。我从来没有看到它有多大帮助,而且它肯定会因极大地增加总代码大小(和缓存利用率)而受到伤害。如果您使用 -Os 优化级别,默认情况下它是关闭的,所以没有什么可担心的。否则,您可以使用适当的 -f 选项禁用所有对齐方式。

关于c++ - GCC函数填充值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4486301/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com