C11标准添加了aligned_alloc
函数来分配未初始化的对齐内存。该标准还包括用于分配内存的calloc
函数,该函数被初始化为零,但仅将其与最大类型的大小对齐。
为什么C11标准不包含一个分配初始化为零的对齐内存的aligned_calloc
函数?
我知道您只需memset结果即可获得初始化内存,但calloc
函数在某些操作系统上非常有用,因为出于安全原因,内核提供的内存通常必须已经为零初始化(并与页面大小对齐)。calloc
可以利用这一点并避免双重初始化。
此外,一些操作系统(如linux)以写时复制的方式提供内存,这种方式与calloc
一起允许构造原始的稀疏数据结构。在aligned_alloc
的结果上初始化memset将销毁此属性。
在我看来,这些优点,虽然不是可移植的,但应该足以拥有第二个对齐分配功能。
发布于 2014-04-19 01:34:51
我能提供的最好的猜测是,aligned_calloc特别违背了C1X章程的明确目标之一:
与C9X不同的是,伦敦会议的共识是没有任何发明,无一例外。只有那些有历史的和商业实现共同使用的特性才应该被考虑。此外,还必须注意以使标准和商业实现兼容的方式标准化这些功能。
http://www.open-std.org/JTC1/SC22/wg14/www/docs/n1250.pdf
环顾商业实现,aligned_malloc是广泛可用的,并且在几乎每个平台上都是通用的。在许多平台上,对齐的calloc需要更多的包装才能提供比aligned_malloc() + memset()对更多的内容,因此可以被认为是创造性的,因此被省略了。
这是我最好的猜测。
https://stackoverflow.com/questions/23092621
复制相似问题