gpt4 book ai didi

c - 哪个更可能浪费更少的内存,一个大内存管理器还是几个小内存管理器?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:52:01 26 4
gpt4 key购买 nike

<分区>

首先,这可能更像是一道数学题。

我正在编写一个模块,它需要一段一段地使用内存,并且在其实例死亡之前永远不会释放它,因此我编写了一个简单的内存管理器来减少 malloc。内存管理器在初始化时需要一 block 内存,内存块的大小由用户控制,然后管理器在需要时将内存块传递给用户。如果管理器内存不足,它会通过 realloc 将其内存块大小加倍。最后,我们可以得出所需内存大小与总浪费内存大小之间的关系是:

f(x) = 2^k - x, 2^(k-1) < x <= 2^k

现在我有几个内存用户,我可以为他们每个人创建一个内存管理器(管理器的开销不值得考虑),或者只创建一个内存管理器并在所有用户之间共享。用户数量和每个用户使用内存的大小可能相差很大。那么,哪种策略更有可能浪费更少的内存?


内存管理器确实隐藏了实际的内存块位置并向用户提供偏移量,以避免realloc问题。界面非常简单:

void *memo_ref(Memo memo, MemoOffset offset)
{
panic(offset < memo->used, "invalid offset is passed to memo");
return &memo->memory[offset];
}

所以我认为编译器会内联它并且优化没有困难。

而且,无需担心数据竞争,因为管理器的所有用户都来自同一个线程。他们只是以交错的方式要求。

在我看来,一个大的经理会导致更快的程序,因为更少的 realloc 这是一个很大的成本。所以我的重点是内存使用。感谢您的帮助。

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