c++ - C++中的清理堆栈

标签 c++

我们如何清理堆栈...

return 语句用于从函数中退出。现在

if (m1.high_[0] < m2.low_[0]) return FALSE;

这里有 m1 和 m2 两个点,分别具有 high[0]、low[0]、low[1] 和 high[1] 值..

现在如果我们使用 return with 语句而不是清理堆栈..我的意思是带有 if 条件的 return 语句用于清理堆栈..是吗?

最佳答案

您并没有真正“清理”堆栈。所发生的只是堆栈指针被重置到调用程序堆栈存储的顶部。

从此程序调用的任何后续函数都将获得与您的程序接收到的相同的堆栈指针(包括您的程序设置的任何值——这就是初始化自动存储很重要的原因!)

相反地,当您的程序调用一个函数时,被调用函数将被赋予一个堆栈指针,该指针恰好位于堆栈的最后一 block 之后,并且,如果您调用多个函数,它们将以相同的堆栈指针结束。


澄清 C C++ 程序支持三种类型的存储分配:-

“static”对于编译单元来说是有效的全局变量。主程序启动时会分配一个合适的存储 block ,并且每个“静态”都会在这个存储 block 中分配一个地址。在主程序终止之前一直使用它。

“堆”这是在底层操作系统的帮助下由“malloc”管理的存储区域的集合。大多数(但不是全部!)"new"对象都以这种方式分配内存。

然后“自动”存储(默认)使用堆栈。同样,这是在主程序启动时分配的相当大的连续存储区域。 “main”使用的任何自动变量都将分配到堆栈的开头,并且堆栈指针递增以指向 main 的最后一个变量结束后的单词。 当调用第一个函数时,它从当前堆栈指针开始分配其自动变量,并将 stck 指针设置为其最后一个变量结束后的字,如果调用其他函数,则重复该过程。当一个函数结束时,堆栈指针将重置为调用该函数时它所具有的任何值。

通过这种方式,存储可以不断重复使用,无需任何 mallocs 或 frees,并且可以轻松实现递归函数,因为每次调用都会在堆栈中获得自己的部分(直到堆栈用完!)。

关于c++ - C++中的清理堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4093503/

相关文章:

c++ - 带有实现和头文件的Makefile

c++ - 除非链接到 pthreads,否则不会出现死锁?

c++ - 无法在 C++ 项目中链接 crypt

c++ - 追踪 WinSock MFC 应用程序中句柄泄漏的来源

c++ - "if(pointer) delete ponter"即使指针未初始化也尝试删除

c++ - 如何在 Mac 上设置 C++ 应用程序名称和图标?

c++ - 如何隔离只允许创建为单例的不良行为 3rd-party c-lib?

c++ - 线段树构建方法

c++ - 我们需要序列化 ​​VAO 和 VBO

c++ - QT UI双分割器