本地语言中的堆栈溢出行为

时间:2013-04-07 21:50:36

标签: memory-management native stack-overflow undefined-behavior variable-length-array

我很好奇为什么大多数本地语言,包括C,C ++和D,都没有定义堆栈溢出行为。是因为它需要检测每个堆栈变量分配和函数调用,这反过来会使代码变得非常慢? Evenso,它至少可以在编译器输入一些额外的详细调试标志时启用。

我问这个是因为在编写C ++代码时,我对使用C99可变长度数组(VLA)和C函数alloca感到怀疑。对于某些内存处理密集型算法,这可能会导致显着的加速。

我猜这个问题已被多次询问,但我似乎无法找到有关stackexchange的相关文章。

1 个答案:

答案 0 :(得分:0)

在我看来,原因是高级语言 - 与汇编程序相反 - 应该尽可能独立于程序执行的硬件。它们为程序员提供了制定问题的方法,但让编译器以最佳方式使用硬件。
因此,堆栈的概念是一个高级程序员不应该被打扰的东西,既不是机器有多少寄存器,也不是它有多核CPU。