Memory management 本机语言中的堆栈溢出行为 我很好奇为什么大多数本地语言,包括C、C++和D,都不定义堆栈溢出行为。是不是因为它需要检测每个堆栈变量分配和函数调用,这反过来又会使代码变得异常缓慢?即便如此,至少只有当编译器收到一些额外的详细调试标志时,它才能被启用 我问这个问题是因为在编写C++代码时,对于使用C99可变长度数组VLA和C函数ALROCA感到怀疑。对于某些内存处理密集型算法,这可能会导致显著的加速

Memory management 本机语言中的堆栈溢出行为 我很好奇为什么大多数本地语言,包括C、C++和D,都不定义堆栈溢出行为。是不是因为它需要检测每个堆栈变量分配和函数调用,这反过来又会使代码变得异常缓慢?即便如此,至少只有当编译器收到一些额外的详细调试标志时,它才能被启用 我问这个问题是因为在编写C++代码时,对于使用C99可变长度数组VLA和C函数ALROCA感到怀疑。对于某些内存处理密集型算法,这可能会导致显著的加速,memory-management,native,stack-overflow,undefined-behavior,variable-length-array,Memory Management,Native,Stack Overflow,Undefined Behavior,Variable Length Array,我猜这个问题已经被问过很多次了,但我似乎找不到关于stackexchange的相关文章。在我看来,原因是高级语言——与汇编语言不同——应该尽可能独立于执行程序的硬件。它们为程序员提供了解决问题的方法,但让编译器以最佳方式使用硬件。 因此,堆栈的概念是高级程序员不应该为之烦恼的,不管机器有多少寄存器,也不管它是否有多核CPU。至少在C语言中,标准甚至不要求堆栈的存在。这使得标准化的堆栈溢出处理有点困难。不过,许多操作系统和其他环境确实提供了这种支持。

我猜这个问题已经被问过很多次了,但我似乎找不到关于stackexchange的相关文章。

在我看来,原因是高级语言——与汇编语言不同——应该尽可能独立于执行程序的硬件。它们为程序员提供了解决问题的方法,但让编译器以最佳方式使用硬件。 因此,堆栈的概念是高级程序员不应该为之烦恼的,不管机器有多少寄存器,也不管它是否有多核CPU。

至少在C语言中,标准甚至不要求堆栈的存在。这使得标准化的堆栈溢出处理有点困难。不过,许多操作系统和其他环境确实提供了这种支持。