如何编写一个返回指向堆栈的指针的函数

在阅读了以下问题之后 ,我明白没有这样的事情存在(至少不是“便携式”)。

但是我主演单声道代码库中的以下代码片段 ,它返回指向堆栈的指针:

static void * return_stack_ptr () { gpointer i; return &i; } 

令我感到惊讶的是,上面的代码甚至可以在诸如PowerPC之类的arch上工作,我认为这只适用于x86(也许只有gcc)。

这是否适用于PowerPC?

堆栈的目的是支持函数调用和局部变量。 如果你的系统有一个堆栈,它将使用它,并在那里分配局部变量。 因此,假设局部变量的地址指向堆栈中的某个位置是非常合理的。 这不是特定于x86或gcc – 这是一个相当普遍的想法。

但是,使用指向不存在的变量的指针(即在超出范围之后)是未定义的行为。 所以这个function不能保证做任何有意义的事情。 实际上,“聪明”的编译器可以检测到您的程序使用未定义的行为,并用无操作替换您的代码(并将其称为“性能优化”)。

或者,“明智的”编译器可以识别您的函数返回指向堆栈的指针,并通过使用硬件堆栈指针来内联它。

这两个选项都没有保证 – 这段代码不可移植。