C11标准添加了aligned_alloc
函数来分配未初始化的对齐内存。
该标准还包括calloc
函数来分配内存,该内存初始化为零但只能将其与最大类型的大小对齐。
为什么C11标准不包含aligned_calloc
函数来分配零初始化的对齐内存?
我知道你可以memset结果来获取初始化的内存,但calloc
函数在某些操作系统上非常有用,因为内核提供的内存通常必须初始化为零(并与页面大小对齐)出于安全原因。
calloc
可以使用它并避免双重初始化。
此外,一些操作系统(如linux)以写时复制方式提供内存,与calloc
一起允许构建原始稀疏数据结构。 aligned_alloc
结果的初始化memset会破坏此属性。
在我看来,这些优点虽然不便携,但应该足以拥有第二个对齐的分配功能。
答案 0 :(得分:9)
我能提供的最佳猜测是,aligned_calloc特别违反了C1X章程中的一个明确目标:
与C9X不同,伦敦会议的共识是应该没有 发明,无一例外。只有具有历史和共同点的那些功能 应考虑商业实施的使用。还必须要注意 以标准和商业化的方式标准化这些功能 实现兼容。
http://www.open-std.org/JTC1/SC22/wg14/www/docs/n1250.pdf
展望商业实施,aligned_malloc广泛可用,并且在大多数平台上都很常见。一个对齐的calloc需要的不仅仅是在许多平台上包装,而是提供了比aligned_malloc()+ memset()对更多的东西,因此可以被认为是有创造力的,因而被排除在外。
这是我最好的猜测。