填充由汇编程序创建,而不是由gcc创建.它只是看到一个.align指令(或等价物)并且不知道要填充的空间是在函数内部(例如循环对齐)还是在函数之间,因此它必须插入NOP某种类型的s.现代x86汇编程序使用尽可能大的NOP操作码,如果填充用于循环对齐,则意图花费尽可能少的循环.
就个人而言,我对作为优化技术的对齐持怀疑态度.我从来没有看到它有多大帮助,并且通过极大地增加总代码大小(和缓存利用率)肯定会受到伤害.如果您使用-Os优化级别,默认情况下它是关闭的,所以没有什么可担心的.否则,您可以使用适当的-f选项禁用所有对齐.