使用CoverageScanner库与内存池
CoverageScanner库可以使用内部内存池来处理内存分配。这在没有提供标准C函数malloc()和free()的平台上是必要的。
在这种情况下,需要在程序启动时分配一个C数组,该数组将服务于这些函数。这需要估算内存消耗。CoverageScanner库还提供了一种方法来监视使用情况,并检测内存溢出。
内存池大小估算
内存池用于动态加载库支持和字符串操作。其大小取决于被插装的文件数量以及临时输出缓冲区的大小。
对于仅使用静态库并生成单个可执行文件的关键代码,使用以下近似值
512 + 100 *
number_of_instrumented_sources
number_of_instrumented_sources 包括头文件和源文件。用于生成执行报告文件的临时缓冲区的尺寸将自动添加到此尺寸。
监视内存池大小
以下示例说明如何监视内存池的使用情况
#include <stdio.h> #ifdef __COVERAGESCANNER__ void memory_failure( int s ) { int used = -1; int max_used = -1; int size = -1; __coveragescanner_memory_pool_stat( &size, &used, &max_used ); printf( "Memory Failure : Requested:%i Actual Size=%i Actually Used=%i Peak Usage=%i\n", s, size, used, max_used ); exit( 2 ); } #endif int main( int argc, char *argv[] ) { #ifdef __COVERAGESCANNER__ int used = -1; int max_used = -1; int size = -1; __coveragescanner_memory_pool_stat( &size, &used, &max_used ); printf( "Memory Pool Usage: Size=%i Used=%i Peak=%i\n", size, used, max_used ); #endif return 0 ; }
在Microsoft® Windows上编译该示例
cscl memory-pool.c --cs-memory-pool=1000 --cs-memory-alloc-failure-function=memory_failure
在Linux™或macOS上编译该示例
csgcc memory-pool.c -o customiofile --cs-memory-pool=1000 --cs-memory-alloc-failure-function=memory_failure
内存池大小为1000字节加上用于序列化执行报告的临时缓冲区大小。为了监视实际使用情况,请使用函数CoverageScanner.__coveragescanner_memory_pool_stat()
。
如果发生内存溢出,调用C函数memory_failure()
。要模拟溢出,请设置内存池的大小为5字节。
Coco v7.2.0©2024 Qt公司有限公司版权所有。
Qt及其相关标志是芬兰Qt公司及其在全球的商标。所有其他商标归其各自所有者所有。