堆栈的目的是支持函数调用和局部变量。如果您的系统有一个堆栈,它将使用它,并在其中分配局部变量。因此,假设局部变量的地址指向堆栈中的某个位置非常合理。这不是x86或gcc特有的-这是一个相当普遍的想法。
但是,使用指向不存在的变量的指针(即,超出范围后)是未定义行为。因此,不能保证此功能可以做任何有意义的事情。实际上,“聪明的”编译器可以检测到您的程序使用了未定义的行为,并用无操作替换了您的代码(并将其称为“性能优化”)。
或者,“明智”的编译器可以识别出您的函数返回了指向堆栈的指针,并通过使用硬件堆栈指针对其进行了内联。
都不保证这两个选项-此代码不可移植。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句