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

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

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

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

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

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

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

与C9X不同,伦敦会议的共识是没有任何发明,毫无例外。 只应考虑具有历史记录且商业实现常用的function。 此外,必须注意以一种使标准和商业实现兼容的方式标准化这些function。

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

看看商业实现,对齐_malloc广泛可用并且对于大多数平台来说都是通用的。 一个对齐的calloc需要的不仅仅是在许多平台上包装,而是提供比aligned_malloc()+ memset()对更多的东西,因此可以被认为是创造性的,因此被省略了。

那是我最好的猜测。