首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果函数不返回,调用栈会泄漏内存吗?

如果函数不返回,调用栈会泄漏内存吗?
EN

Stack Overflow用户
提问于 2019-03-28 22:37:26
回答 2查看 125关注 0票数 0

我不确定这是如何特定于语言的,但特别是在PHP中,如果一些函数永远不会返回,您会在调用堆栈中泄漏内存吗?

例如,假设您有一个带有redirect() (或C中的gotos )语句的长函数,该语言或环境如何知道删除堆栈的帧?有没有一种方法可以用来确定堆栈帧永远不会被返回到?

EN

回答 2

Stack Overflow用户

发布于 2019-03-28 22:45:02

如果你的函数在某些情况下没有返回任何东西,那么在我看来这是一个糟糕的设计问题。不,它不应该仅仅因为不返回任何东西而导致任何内存泄漏。

无论您的函数的返回值最终是否被使用,您都应该始终拥有一个返回某些内容(null、false或任何值)的路径。否则你永远不会还任何东西..。在这种情况下,您的函数将更像是其他编程语言所引用的方法或过程。

如果你正在使用的函数中有内存泄漏,那么你需要仔细检查函数的代码,看看是什么导致了内存泄漏。

票数 0
EN

Stack Overflow用户

发布于 2019-03-29 23:14:28

这个问题由Memory leak on the stack回答注:在我发布这个问题之前,我确实遇到过这个问题,但直到做了更多的研究,我才明白答案。

Dr: PHP为每个页面维护一个堆栈。在C/C++中,“自动持续时间”存储是由编译器自动清理的,当程序执行超出自动持续时间分配的范围时,编译器告诉操作系统删除自动持续时间分配。

因此,我猜编译器可以检测到导致函数不返回的执行路径以及“标记”(?)这些路径被标记为移出作用域,就像返回被标记为移出作用域一样。

https://en.cppreference.com/w/cpp/language/storage_duration

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55400301

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档