我看到一些
#pragma
、__attribute__
和 alignas
对齐方法,但问题是,编译器生成的代码是否在运行时检查内存地址(堆栈指针)并在不满足对齐标准时添加填充?这是否会导致函数调用期间的处理开销增加?
我认为这个动作会在代码的执行过程中完成,即会检查Stack指针。但我没有看到任何地方提到这一点。
它不是在运行时完成的,仅在编译时完成:
int foo(void)
{
int __attribute__((aligned(17))) x;
x = rand();
return x;
}
输出:
<source>:9:5: error: requested alignment '17' is not a positive power of 2
9 | int __attribute__((aligned(17))) x;
| ^~~