我的代码中似乎发生了内存泄漏,所以我尝试在我的代码中找到导致内存泄漏的位置。
在 无法获得堆中可用内存的准确信息的帖子中, 有人告诉我,当请求小内存以减少系统调用时,操作系统可能会分配大内存。
它在 Windows 中正确吗?
我的代码中似乎发生了内存泄漏,所以我尝试在我的代码中找到导致内存泄漏的位置。
在 无法获得堆中可用内存的准确信息的帖子中, 有人告诉我,当请求小内存以减少系统调用时,操作系统可能会分配大内存。
它在 Windows 中正确吗?
在看到您的其他问题之后,这里相关的不是您分配内存时发生的情况。重要的是当你释放它时会发生什么。特别是 1 KB 的分配永远不会释放回操作系统,它太小了。它被添加到空闲块列表中,准备好被(大约)相同大小的下一次分配使用。
您无法使用 VirtualQuery() 可靠地检测内存泄漏。
如果您使用 Visual Studio,请使用其内置的泄漏检测功能。还有很多其他工具。
在大多数系统(包括 Windows 上的最新编译器)上,堆管理器将从操作系统分配相对较大的内存“块”,然后将其分成几块供程序使用。来自操作系统的分配通常至少为数十千字节。
当程序结束执行时,这些大块内存将返回给操作系统。它可以比这更早发生,但执行结束是最常见的。
操作系统将跟踪这些大块中的每一个作为单个分配(即使堆管理器随后会将其分解为较小的部分以供您的代码使用)。任何已释放回操作系统的内容都将显示为空闲内存块。