我不确定这是如何特定于语言的,但特别是在PHP中,如果一些函数永远不会返回,您会在调用堆栈中泄漏内存吗?
例如,假设您有一个带有redirect() (或C中的gotos )语句的长函数,该语言或环境如何知道删除堆栈的帧?有没有一种方法可以用来确定堆栈帧永远不会被返回到?
发布于 2019-03-28 22:45:02
如果你的函数在某些情况下没有返回任何东西,那么在我看来这是一个糟糕的设计问题。不,它不应该仅仅因为不返回任何东西而导致任何内存泄漏。
无论您的函数的返回值最终是否被使用,您都应该始终拥有一个返回某些内容(null、false或任何值)的路径。否则你永远不会还任何东西..。在这种情况下,您的函数将更像是其他编程语言所引用的方法或过程。
如果你正在使用的函数中有内存泄漏,那么你需要仔细检查函数的代码,看看是什么导致了内存泄漏。
发布于 2019-03-29 23:14:28
这个问题由Memory leak on the stack回答注:在我发布这个问题之前,我确实遇到过这个问题,但直到做了更多的研究,我才明白答案。
Dr: PHP为每个页面维护一个堆栈。在C/C++中,“自动持续时间”存储是由编译器自动清理的,当程序执行超出自动持续时间分配的范围时,编译器告诉操作系统删除自动持续时间分配。
因此,我猜编译器可以检测到导致函数不返回的执行路径以及“标记”(?)这些路径被标记为移出作用域,就像返回被标记为移出作用域一样。
https://stackoverflow.com/questions/55400301
复制相似问题