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