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

How to write a function which return a pointer to the stack

看了下面的,我明白了没有这样的东西存在(至少不'portable')。

然而,我正在关注来自单声道代码库的以下 piece of code,其中 return 一个指向堆栈的指针:

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

令我惊讶的是,上面的代码甚至可以在 PowerPC 等 arch 上运行,我原以为这只能在 x86 上运行(也许只能在 gcc 上运行)。

这会在 PowerPC 上运行吗?

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

但是,使用指向不存在的变量的指针(即超出范围后)是未定义的行为。所以这个函数不能保证做任何有意义的事情。事实上,"clever" 编译器可以检测到您的程序使用了未定义的行为,并用空操作替换您的代码(并将其称为 "performance optimization")。

或者,"wise" 编译器可以识别您的函数 returns 一个指向堆栈的指针,并使用硬件堆栈指针将其内联。

这两个选项都不能保证 - 此代码不可移植。