c - aligned_alloc 函数要求

标签 c memory-management memory-alignment

我在看aligned-alloc()的解释: http://en.cppreference.com/w/c/memory/aligned_alloc

void *aligned_alloc( size_t alignment, size_t size );

“分配size字节的未初始化存储,其对齐方式由alignment指定。size参数必须是alignment的整数倍。”

但是,示例代码是这样使用它的:

int *p2 = aligned_alloc(1024, 10*sizeof *p2);

10*sizeof *p等于40,所以不是1024的整数倍。

我误解了什么?

最佳答案

其实C11标准好像拿不定主意,一直在改需求:一开始是undefined behavior,后来DR 460改成失败返回空指针,现在好像是想要更改它以接受任何值作为参数: http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2072.htm

而且编译器似乎并不关心这些限制。

关于c - aligned_alloc 函数要求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41031363/

相关文章:

c - 全局变量似乎有两个不同的地址......?

c - C 语言的 vhdl 解析器

php - 是否有比 file_get_contents 占用更少内存或更有效的合并 MP3 的方法?

c - 如何将 2 个 char 变量组合并存储在一个整型变量中?

assembly - 为什么x86-64/AMD64 System V ABI要求16字节堆栈对齐?

c++ - 如何使用 alignof 强制对齐堆分配?

将 WAV 转换为 base64

c - 导出();不管用

c - 为什么同一个 C 程序有时会快得多

linux - 为什么反汇编代码中有一些 "meaningless"内存槽?