为什么在C11中没有对齐的calloc

时间:2014-04-15 19:24:06

标签: c

C11标准添加了aligned_alloc函数来分配未初始化的对齐内存。 该标准还包括calloc函数来分配内存,该内存初始化为零但只能将其与最大类型的大小对齐。

为什么C11标准不包含aligned_calloc函数来分配零初始化的对齐内存?

我知道你可以memset结果来获取初始化的内存,但calloc函数在某些操作系统上非常有用,因为内核提供的内存通常必须初始化为零(并与页面大小对齐)出于安全原因。 calloc可以使用它并避免双重初始化。

此外,一些操作系统(如linux)以写时复制方式提供内存,与calloc一起允许构建原始稀疏数据结构。 aligned_alloc结果的初始化memset会破坏此属性。

在我看来,这些优点虽然不便携,但应该足以拥有第二个对齐的分配功能。

1 个答案:

答案 0 :(得分:9)

我能提供的最佳猜测是,aligned_calloc特别违反了C1X章程中的一个明确目标:

  

与C9X不同,伦敦会议的共识是应该没有       发明,无一例外。只有具有历史和共同点的那些功能       应考虑商业实施的使用。还必须要注意       以标准和商业化的方式标准化这些功能       实现兼容。

http://www.open-std.org/JTC1/SC22/wg14/www/docs/n1250.pdf

展望商业实施,aligned_malloc广泛可用,并且在大多数平台上都很常见。一个对齐的calloc需要的不仅仅是在许多平台上包装,而是提供了比aligned_malloc()+ memset()对更多的东西,因此可以被认为是有创造力的,因而被排除在外。

这是我最好的猜测。