局部变量定义期间是否检查堆栈指针是否对齐?

问题描述 投票:0回答:1

我看到一些

#pragma
__attribute__
alignas
对齐方法,但问题是,编译器生成的代码是否在运行时检查内存地址(堆栈指针)并在不满足对齐标准时添加填充?这是否会导致函数调用期间的处理开销增加?

我认为这个动作会在代码的执行过程中完成,即会检查Stack指针。但我没有看到任何地方提到这一点。

c stack alignment
1个回答
0
投票

它不是在运行时完成的,仅在编译时完成:

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;
      |     ^~~
© www.soinside.com 2019 - 2024. All rights reserved.