gcc -mpreferred-stack-boundary选项

Nar*_*aki 12 linux stack gcc compilation

我想知道-mpreferred-stack-boundary在GNU编译器编译期间使用选项有什么用处.我已经检查了文档,但解释丢失了.有人可以解释一下吗.

Emp*_*ian 13

我想知道在GNU调试器的编译过程中使用-mpreferred-stack-boundary选项有什么用.

该选项与调试器完全无关.

它会影响二进制文件中生成的代码.默认情况下,GCC会安排一些事情,以便每个函数在进入后立即将其堆栈指针对齐在16字节边界上(如果您有局部变量并启用sse2指令,这可能很重要).

如果将默认值更改为eg -mpreferred-stack-boundary=2,则GCC会将堆栈指针对齐到4字节边界.这将减少您的例程的堆栈需求,但如果您的代码(或您调用的代码)确实使用sse2,则会崩溃,因此通常不安全.

  • +1值得一提的是实际边界大小为2 ^ PSB.如果将此参数设置为2,则边界大小为2 ^ 2 = 4.如果将其设置为4,则边界大小为2 ^ 4 = 16. (3认同)