gpt4 book ai didi

c - 假设的 malloc/free 实现,带有要释放的显式大小参数

转载 作者:太空宇宙 更新时间:2023-11-04 07:56:51 26 4
gpt4 key购买 nike

在释放函数需要大小的情况下,动态内存分配和释放 API 有什么优势吗?

更重要的是,是否有任何有趣的动态内存分配实现因为 free 不将大小作为参数而无法实现?

mallocfree 库函数有一个有趣的不对称性。 free 不需要 free 的大小。

void *malloc(size_t size);

对比

void free(void *ptr);

这意味着 malloc 实现必须将元数据存储在某个地方,以便 free 可以完成它的工作*。

如果 API 是:

void free(void *ptr, size_t size);

您能否为这些函数编写一个缓存效率更高、总体内存使用量更少或具有更多理想属性的实现?

*我不认为要求大小来释放东西会完全消除存储某种元数据的需要,但它可以大大简化它。

最佳答案

Would there be any advantages to a dynamic memory allocation and deallocation API where the deallocation function requires the size?

是的,可以将用户提供的大小与系统对大小的理解进行比较。或者,系统甚至不需要跟踪大小。

然而,用户将需要保持跟踪,这有一个缺点。底层分配系统可以更多地访问尺码信息,并且可以比用户更有效、更忠实地执行此操作。

... uses less memory overall, ...

不太可能,因为底层分配系统可以执行超越可移植 C 的效率技巧,而不是让用户承担同样的负担。


标准 C 库的设计选择是很久以前做出的,有利于底层系统保持跟踪。


典型的包装器可以使用 my_alloc(size) 和过度分配来存储元数据,并使用 my_free(ptr, size) 来执行此检查。

关于c - 假设的 malloc/free 实现,带有要释放的显式大小参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49461085/

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