gpt4 book ai didi

c - malloc 检查点

转载 作者:太空宇宙 更新时间:2023-11-04 04:54:46 25 4
gpt4 key购买 nike

我相信一定有人已经实现了这样的东西!我正在寻找的是“检查点”堆状态然后清除自上次检查点以来发生的所有分配的能力。基本上,我正在寻找的是 _CrtMemCheck Api 的自然推论。

类似的(最好是跨平台的)

//we save the heap state here in s1
_CrtMemCheckpoint( &s1 );

//allocs and frees

//Get rid of all allocs since checkpoint s1 that have not been freed!
_CrtMemClearAllObjectsSince(&s1);

最佳答案

在 C 中没有使用标记/释放内存分配的标准方法。如果您知道所有 malloc/free 调用将以 LIFO 方式使用,您可能能够使用类似以下内容链接到您自己的malloc/free` 函数中:

#define MY_HEAP_SIZE 12345678
unsigned char my_mem[MY_HEAP_SIZE];
unsigned char *my_alloc_ptr = my_mem;

void *malloc(size_t size)
{
void *ret = my_alloc_ptr;
if (size <= MY_HEAP_SIZE && ((my_alloc_ptr - my_mem)+size) <= MY_HEAP_SIZE)
{
my_alloc_ptr += size;
return (void*)ret;
}
else
return (void*)0;
}

void free(void *ptr)
{
if (ptr)
my_alloc_ptr = ptr;
}

这种方法要求每个分配 block 的开销为零字节,但是在任何 block 上调用 free() 也会释放所有稍后分配的 block 。如果外部代码不按后进先出顺序使用 malloc/free ,则可以使用另一种方法,但是如果在您的代码释放之前不释放 block ,那就没关系,那就是free() 什么都不做,但有一些其他功能,其行为类似于上面的 free。更复杂的变体也是可能的,但在第一种方法就足够的情况下,没有什么比它的效率更高的了。非常适合嵌入式系统(尽管我通常称其为 malloc 以外的名称)。

关于c - malloc 检查点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10227932/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com