0

我的代码中似乎发生了内存泄漏,所以我尝试在我的代码中找到导致内存泄漏的位置。

无法获得堆中可用内存的准确信息的帖子中, 有人告诉我,当请求小内存以减少系统调用时,操作系统可能会分配大内存。

它在 Windows 中正确吗?

4

2 回答 2

4

在看到您的其他问题之后,这里相关的不是您分配内存时发生的情况。重要的是当你释放它时会发生什么。特别是 1 KB 的分配永远不会释放回操作系统,它太小了。它被添加到空闲块列表中,准备好被(大约)相同大小的下一次分配使用。

您无法使用 VirtualQuery() 可靠地检测内存泄漏。

如果您使用 Visual Studio,请使用其内置的泄漏检测功能。还有很多其他工具。

于 2012-05-22T05:22:56.480 回答
0

在大多数系统(包括 Windows 上的最新编译器)上,堆管理器将从操作系统分配相对较大的内存“块”,然后将其分成几块供程序使用。来自操作系统的分配通常至少为数十千字节。

当程序结束执行时,这些大块内存将返回给操作系统。它可以比这更早发生,但执行结束是最常见的。

操作系统将跟踪这些大块中的每一个作为单个分配(即使堆管理器随后会将其分解为较小的部分以供您的代码使用)。任何已释放回操作系统的内容都将显示为空闲内存块。

于 2012-05-22T06:24:19.507 回答