一个回归testing如何certificateVirtualAlloc是否被调用?

我正在编写一个正在优化的(Win7)C ++例程的回归testing,该例程以前已经释放并重新分配了很多巨大的缓冲区:内存stream失。 我想certificate在testing过程中,程序不会分配任何大的内存区域(比如16M或更大),而是有效地重新使用在初始化时分配的内存。 如果VirtualAlloc被调用来获得一些大的区域(比如说16M),testing就会失败。

有没有一个优雅的方法来统计对Windows VirtualAlloc的调用? 这将成为永久自动回归testing套件的一部分,因此使用外部工具或修改下游代码是不可行的。

检查提交的内存总量并不适合,因为我想断言该例程不再搅动(释放和重新分配缓冲区)。

挂钩

Detours可以挂接任意的方法调用,但是

  • 它仅供非商业用途免费使用
  • 单元测试可能是过分的

Rohitab和Easyhook似乎提供了类似的东西。

备择方案

如果您的进程是32位,您可以提前分配4080 MB(更多或更少),并且更多调用VirtualAlloc将失败。 这不会涵盖多次分配/取消分配16 MB的情况。 如果你保留了这些4080 MB的内存,这将会更快,因为不需要真正的内存。

依赖注入。

代替测试中的代码调用本地内存分配器,而是传递一个指向代码可以使用的分配器对象的指针。 对于生产代码,这个分配器对象只是调用本地内存分配函数。 对于测试,您传递一个分配器来检查和/或记录大小。