【发布时间】:2014-04-02 04:09:37
【问题描述】:
我的程序中有一些大的内存分配,我在整个程序中都需要它。那么删除这段记忆的最佳位置是什么?我真的不想让它一个人呆着..WM_DESTROY 消息总是发送吗?我的意思是即使我的应用程序被其他进程杀死..?如果不是,请指导哪个是删除内存的最佳位置。
【问题讨论】:
-
如果您的应用程序被杀死,您分配的所有内存都将被操作系统释放,您对此无能为力:您既不能帮助它,也不能阻止它。
-
如果你的应用程序被另一个进程杀死了,你无论如何也不能做任何事情。除此之外,
WM_DESTROY是进行清理的好地方。 -
@KubaOber 是的,它无论如何都被释放了(虽然依赖于操作系统,但对 Windows 有效),但我认为自己释放它很好。因为如果养成这种习惯,我不想养成要求操作系统也这样做的习惯,而在为嵌入式环境编码时这是非常危险的
-
"在为嵌入式环境编码时,这是非常危险的" 在嵌入式环境中,你要么有一个操作系统为你做这件事,要么你在系统之后不做动态内存分配(也不释放)根本没有初始化,而且可能没有
WM_DESTROY的概念,也可能没有进程的概念(也许有任务)。你没有做任何“依赖于操作系统”的事情,这是某种现代 Windows,你不需要浪费时间在进程退出时释放内存。任何具有分页内存的合理操作系统都会在进程终止时释放进程内存。 -
此外,这都是 moot - 当您的进程被 杀死 时,您根本无法执行任何代码。这就是杀死进程的意思:你的代码停止执行,你的进程不复存在。您对此无能为力,因为您无法运行任何代码。由于您无法运行任何代码,因此甚至没有理由担心事件传递 - 您的消息泵也不会运行。
标签: winapi memory-leaks event-driven