gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 16:31:13 27 4
gpt4 key购买 nike

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

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

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

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

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

最佳答案

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

Unlike for C9X, the consensus at the London meeting was that there should be no invention, without exception. Only those features that have a history and are in common use by a commercial implementation should be considered. Also there must be care to standardize these features in a way that would make the Standard and the commercial implementation compatible.

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

环顾商业实现,aligned_malloc 被广泛使用并且对大多数平台都很常见。对齐的 calloc 需要的不仅仅是在许多平台上进行包装,以提供比 aligned_malloc() + memset() 对更多的功能,因此可以被认为具有创造性,因此被排除在外。

那是我最好的猜测。

关于c - 为什么在 C11 中没有对齐的 calloc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23092621/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com