有没有一种便携的方法可以用STL样式的分配器包装替换malloc()/free()的使用?
背景:我有一个C库,允许指定自定义的malloc()/free()函数进行内存管理,并在多线程环境中使用。在寻找一个好的多线程分配器时,我发现GCC-libstdc++的mt_alloc适用于我的工作负载。现在我想在这个C库中使用它,但该怎么做呢?
我看到的主要问题在于deallocate()函数,与free()相反,它除了地址外还需要传入分配的内存块大小。因此,我需要以某种方式跟踪与每个内存分配相关联的大小,以便在释放内存时将其提供给deallocate()。我想到的最简单的解决方案是在内存块的开头存储分配的内存大小,但我不确定可能会出现的对齐问题该如何解决。
是否有我忽略的简单解决方案?
背景:我有一个C库,允许指定自定义的malloc()/free()函数进行内存管理,并在多线程环境中使用。在寻找一个好的多线程分配器时,我发现GCC-libstdc++的mt_alloc适用于我的工作负载。现在我想在这个C库中使用它,但该怎么做呢?
我看到的主要问题在于deallocate()函数,与free()相反,它除了地址外还需要传入分配的内存块大小。因此,我需要以某种方式跟踪与每个内存分配相关联的大小,以便在释放内存时将其提供给deallocate()。我想到的最简单的解决方案是在内存块的开头存储分配的内存大小,但我不确定可能会出现的对齐问题该如何解决。
是否有我忽略的简单解决方案?
alignof(std::size_t)
>=alignof(<your Type>)
,那么一切都应该没问题。 还要注意,alignof(std::max_align_t)
可能是最大的对齐方式(尽管实现可以自由地拥有具有扩展对齐
的对象,但这很少见)。 - Martin Yorkalignof
,请尝试使用__alignof
。 - Martin York