回归测试如何证明VirtualAlloc是否被调用?

时间:2015-07-29 21:17:08

标签: c++ windows unit-testing heap-profiling

我正在为正在优化的(Win7)C ++例程编写回归测试,该例程以前释放并重新分配了许多巨型缓冲区:内存流失。我想证明在测试期间,程序不会分配任何大的内存区域(比如16M或更大),而是有效地重新使用在初始化时分配的内存。归结为如果调用VirtualAlloc来获得一些大区域(比如说16M),测试应该会失败。

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

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

2 个答案:

答案 0 :(得分:1)

挂钩

Detours可以挂钩任意方法调用,但

  • 仅限非商业用途
  • 单元测试可能有点过分

RohitabEasyhook似乎提供了类似的内容。

替代

如果您的进程是32位,则可以提前分配4080 MB(或多或少),并且对VirtualAlloc的更多调用将失败。这不包括多次分配/解除分配16 MB的情况。如果保留这些4080 MB,这甚至会很快,因为不需要真正的内存。

答案 1 :(得分:1)

依赖注入。

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