我很好奇为什么大多数本地语言,包括C,C ++和D,都没有定义堆栈溢出行为。是因为它需要检测每个堆栈变量分配和函数调用,这反过来会使代码变得非常慢? Evenso,它至少可以在编译器输入一些额外的详细调试标志时启用。
我问这个是因为在编写C ++代码时,我对使用C99可变长度数组(VLA)和C函数alloca
感到怀疑。对于某些内存处理密集型算法,这可能会导致显着的加速。
我猜这个问题已被多次询问,但我似乎无法找到有关stackexchange的相关文章。
答案 0 :(得分:0)
在我看来,原因是高级语言 - 与汇编程序相反 - 应该尽可能独立于程序执行的硬件。它们为程序员提供了制定问题的方法,但让编译器以最佳方式使用硬件。
因此,堆栈的概念是一个高级程序员不应该被打扰的东西,既不是机器有多少寄存器,也不是它有多核CPU。