什么是堆栈展开?搜索了但找不到有启发性的答案!
原文由 Rajendra Uppal 发布,翻译遵循 CC BY-SA 4.0 许可协议
堆栈展开是在运行时从函数调用堆栈中删除函数条目的过程。它通常与异常处理有关。在 C++ 中,当发生异常时,会在函数调用堆栈中线性搜索异常处理程序的所有条目,然后将具有异常处理程序的函数从函数调用堆栈中删除。
原文由 Sarath Govind 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答1.3k 阅读✓ 已解决
1 回答1.1k 阅读✓ 已解决
4 回答840 阅读
1 回答915 阅读
1 回答949 阅读
1 回答715 阅读
1 回答816 阅读
堆栈展开通常与异常处理有关。这是一个例子:
如果抛出异常,分配给
pleak
的内存将丢失,而分配给s
的内存将由std::string
析构函数在任何情况下正确释放。当退出范围时,分配在堆栈上的对象将“展开”(这里的范围是函数func
。)这是通过编译器插入对自动(堆栈)变量的析构函数的调用来完成的。现在这是一个非常强大的概念,导致了称为 RAII 的技术,即 Resource Acquisition Is Initialization ,它可以帮助我们在 C++ 中管理诸如内存、数据库连接、打开文件描述符等资源。
现在这允许我们提供 异常安全保证。