假设我们有一些固定长度的数据类型,例如 C 结构:
struct T
{
...;
}
分配 T 的一种方法是:
T* create_t() { return (T*) malloc(sizeof(T)); }
并解除分配:
void destroy_t(T* t) { free(t); }
在后台 malloc 使用一种内存分配算法,以不同的方式处理不同大小的块。
假设我们正在编写一个经常调用 create_t 和 destroy_t 的程序,并且一次分配了非常多的 T 个项目(并且以伪随机顺序)。
鉴于所需的内存是固定大小的元素,是否可以编写一个优于 malloc 的通用实现的自定义内存分配方案。
例如,我们可以预先分配一个包含大小为 T 的元素的巨大数组,然后使用它们,但是跟踪哪些元素已分配而哪些未分配的最佳方法是什么?
当使用大量相同大小的分配调用时,Linux 上的 malloc 最终使用什么算法?
与通用 malloc 相比,此自定义方法的性能大致如何?