【问题标题】:Stack Overflow Behaviour in Native Languages本机语言中的堆栈溢出行为
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2015-01-28
    • 2012-04-05
    • 2017-07-02
    • 2019-05-18
    • 1970-01-01
    • 2021-05-28
    • 2012-05-10
    • 2010-12-26
    • 2016-06-12
    相关资源
    最近更新 更多