GCC:如何验证堆是否为空?

问题描述 投票:0回答:1

我编写了一些使用 malloc() 和 free() 的代码。我已经在 GCC/MinGW 上实现了一个模块测试程序来测试这段代码。在某些时候,我想验证所有堆是否已被释放。

我尝试过 malloc() 一些堆,获取指针并随后直接释放它 - 将指针值视为“堆状态”,并将其与开始时的状态进行比较。这通常是有效的,但有时我会看到指针发生变化,而我确信测试的代码没有改变。

检查堆状态或至少检查所有堆是否空闲的正确方法是什么?

gcc malloc heap
1个回答
0
投票

如果您可以使用自己的包装器包装对分配相关函数的所有调用,则一种简单的方法是让包装器在每次分配某些内容时递增一个计数器,并在每次释放某些内容时递减计数器。如果使用多线程代码,您应该使用一些可以原子更新的表单计数器。

一个轻微的增强是让分配代码请求比应用程序多 16 或 32 个字节,并在每个分配的开头放置一个标头,包括其大小和/或程序已进行的未完成分配表的索引(如果您可以对分配总数建立合理的限制,该表可以在静态持续时间存储中维护)。如果通过宏完成分配,则宏可以在调用分配时将

__FILE__
__LINE__
宏的内容传递给分配函数。如果执行了任何分配但从未释放,这将让您找到程序中执行分配的位置。

© www.soinside.com 2019 - 2024. All rights reserved.