当我使用new new来分配1k字节大小的内存时,操作系统会在Windows中做什么?

时间:2012-05-22 05:03:54

标签: c++ memory-leaks

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

在帖子中 Can't obtain accurate information of available memory in the heap 有人告诉我,当一个小内存请求减少系统调用时,操作系统可能会分配大量内存。

在Windows中是否正确?

2 个答案:

答案 0 :(得分:4)

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

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

如果您使用Visual Studio,请使用其built-in leak detection feature。还有很多其他工具。

答案 1 :(得分:0)

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

当程序结束执行时,那些大块内存将返回到OS。 可以发生的时间早于此,但执行结束是最常见的。

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