具有显式大小参数的假设malloc / free实现免费

时间:2018-03-24 04:02:26

标签: c dynamic-memory-allocation

动态内存分配和释放API是否有任何优势,其中释放函数需要大小?

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

mallocfree库函数具有有趣的不对称性。 free不需要free

的大小。

void *malloc(size_t size);

VS

void free(void *ptr);

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

如果改为使用API​​:

void free(void *ptr, size_t size);

您是否可以编写这些函数的实现,这些函数的缓存效率更高,整体使用的内存更少,或者具有更多一些理想的属性?

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

1 个答案:

答案 0 :(得分:2)

  

动态内存分配和释放API是否有任何优势,其中释放函数需要大小?

是的,用户提供的尺寸可以与系统了解尺寸进行比较。 Alternativley系统甚至不需要跟踪大小。

然而,用户需要需要来跟踪,这是一个缺点。底层分配系统可以更多地访问大小调整信息,并且可以比用户更有效,更忠实地执行此操作。

  

...整体使用更少的内存,......

不太可能因为基础分配系统可以比便携式C更好地执行效率技巧,而不是用户做同样的负担。

标准C库设计选择很久以前就有利于底层系统跟踪。

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