【发布时间】:2016-04-07 09:42:05
【问题描述】:
在阅读了以下question 之后,我了解到不存在这样的东西(至少不是'便携式')。
但是,我正在关注来自 mono 代码库的以下 piece of code,它返回一个指向堆栈的指针:
static void *
return_stack_ptr ()
{
gpointer i;
return &i;
}
我很惊讶上面的代码甚至可以在诸如 PowerPC 之类的 Arch 上运行,我原以为这只适用于 x86(也许只有 gcc)。
这可以在 PowerPC 上运行吗?
【问题讨论】:
-
在 C 中没有可以返回指向堆栈指针的可移植函数。只有一定程度的不可移植性。
-
这种东西是平台和编译器相关的。
-
PowerPC ABI 确实有堆栈内存的概念,但是您的编译器可能会选择将变量
i放在堆栈以外的另一个内存中。不过,我会说它适用于任何主流 PowerPC 编译器 -
@atturri:如果您(正确地)使用它的地址,编译器将必须将变量
i放在内存中的某个位置。别无选择。 -
@atturri:无论如何,“堆栈”是一个非正式术语,用于“存储局部变量的内存区域”。根据定义,
&i指向堆栈内部。但是,不能保证“堆栈”是一个连续的内存区域,或者&i位于任一端,或者您可以对&i进行指针运算。
标签: c x86 powerpc stack-frame