【发布时间】:2013-03-29 21:29:24
【问题描述】:
我很好奇为什么大多数原生语言,包括 C、C++ 和 D,都没有定义堆栈溢出行为。是不是因为它需要检测每个堆栈变量分配和函数调用,这反过来又会使代码变得异常缓慢?即便如此,它至少可以在编译器被提供一些额外的详细调试标志时启用。
我之所以这么问,是因为我对在编写 C++ 代码时使用 C99 可变长度数组 (VLA) 和 C 函数 alloca 感到怀疑。对于一些内存处理密集型算法,这可能会导致显着的加速。
我猜这个问题已经被问过很多次了,但我似乎找不到关于 stackexchange 的相关文章。
【问题讨论】:
-
至少在 C 中,标准甚至不需要堆栈的存在。这使得标准化的堆栈溢出处理有点多问。不过,许多操作系统和其他环境确实提供了这种支持。
标签: memory-management native stack-overflow undefined-behavior variable-length-array