使用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公司及其在全球的商标。所有其他商标归其各自所有者所有。