首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么C11中没有对齐的calloc

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

Stack Overflow用户
提问于 2014-04-16 03:24:06
回答 1查看 2.3K关注 0票数 19

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

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

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

此外,一些操作系统(如linux)以写时复制的方式提供内存,这种方式与calloc一起允许构造原始的稀疏数据结构。在aligned_alloc的结果上初始化memset将销毁此属性。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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()对更多的内容,因此可以被认为是创造性的,因此被省略了。

这是我最好的猜测。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23092621

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档