c++ - 我们可以对内存分配进行单元测试吗?

标签 c++ c linux unit-testing memory-management

我必须测试一个提供自己的内存分配例程的库:

void* allocation_routine(size_t size) throw();

文档说明此函数至少分配 size 字节的内存(允许分配更多)。顺便说一句,该函数在内部使用 posix_memalign,但实现可能会发生变化。

我想知道是否可以为这种功能编写单元测试?我们如何测试是否分配了所需的内存量?

更新:

如果我们不能编写单元测试,那么最接近的解决方案是什么?

最佳答案

你不能为这个函数编写单元测试,因为你不能在没有系统调用的情况下在堆上分配内存。因此,这是一个集成测试,因为您无法将被测单元与操作系统隔离开来。

我将创建一个新的小型可执行文件,它为 n 个字节调用 allocation_routine。根据 allocation_routine 应该返回的内容,您可以断言它是非 nullptr。然后,将 n 个字节写入此内存区域。使用 address sanitizer 编译并链接它(gccclang 都可用),然后尝试将其集成到应用程序的测试运行程序中(ctest 等)。

您可能还想通过 POSIX setrlimit 限制可用堆在分配失败时验证行为。

关于c++ - 我们可以对内存分配进行单元测试吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55702021/

相关文章:

c++ - ROS hydro + OpenNI2 + NiTE2 on Linux Ubuntu 12.04 NiTE 初始化失败

c++ - 在 C/C++ 中向指针添加 1 个字节的正确方法是什么?

c - 如何存储可以初始化为整数或 float 的通用四个字节

linux - HDFS +在Linux远程计算机上运行hdfs命令

regex - 如何 grep 包含两次或多次列出特定字母的单词列表?

C++ 字符串操作

c++ - Objective-C 垃圾回收和 C++

c++ - 如何使用 Visual Studio C++ 2010 创建 PNG 图像?

c++ - C++中的链表代码

c - 函数中的 malloc — 段错误