aligned_alloc函数要求

Mic*_*lSB 5 c memory-management memory-alignment

我正在查看对齐的alloc()的解释:http: //en.cppreference.com/w/c/memory/aligned_alloc

void *aligned_alloc( size_t alignment, size_t size );
Run Code Online (Sandbox Code Playgroud)

"分配未初始化存储的大小字节,其对齐方式由对齐指定.大小参数必须是对齐的整数倍."

但是,示例代码使用它如下:

int *p2 = aligned_alloc(1024, 10*sizeof *p2);
Run Code Online (Sandbox Code Playgroud)

10*sizeof*p等于40,因此它不是1024的整数倍.

我有什么误解?

Sha*_*ger 1

根据你自己的参考

传递size不是整数倍的alignmenta 或alignment无效的或不受实现支持的 a 会导致函数失败并返回空指针(C11,如已发布,在这种情况下指定了未定义的行为,这已由 DR 460 纠正) )。

编译器可能会遵循 C11 规则接受此内容,但尚未针对 DR 460 进行更新,并决定在这种情况下“未定义”意味着“有效”。当然,它也可能意味着“成功,但未对齐或分配最小对齐字节”。这是未定义的。耸肩

对于示例代码,它可能是在澄清之前编写的并且不符合标准要求,或者编写时存在拼写错误(正如评论中所建议的,它可能是有意为之1024 * sizeof *p2)。