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