命名空间
变体
操作

memalignment

来自 cppreference.cn
< c‎ | program
在头文件 <stdlib.h> 中定义
size_t memalignment( const void *p );
(自 C23 起)

返回给定地址所满足的最大对齐值。返回值可能大于实现所支持的任何对齐值。如果 p 是空指针值,则返回 0,表示该指针不能用于访问任何类型的对象。

如果返回值为大于或等于 alignof(T),则指针满足类型 T 的对齐要求。

独立实现需要提供 memalignment

目录

[编辑] 参数

p - 要查询对齐的指针

[编辑] 返回值

p 的对齐值,如果 p 是空指针值,则返回 0

[编辑] 注意

在以下常见平台中:

  • 空指针被强制转换为整数 0
  • 指针值直接强制转换为虚拟地址的数值,并且
  • size_tuintptr_t 相同,

此函数可以实现为 return (size_t)p & -(size_t)p;

[编辑] 示例

#include <stdio.h>
#include <stdlib.h>
 
int main()
{
    alignas(128) int i = 0;
    printf("%zu\n%zu\n", memalignment(nullptr), memalignment(&i));
}

可能的输出

0
128

[编辑] 参考资料

  • C23 标准 (ISO/IEC 9899:2024)
  • 7.24.9.1 memalignment 函数 (p: 374)

[编辑] 另请参阅

分配对齐内存
(函数) [编辑]
释放之前分配的指定大小且对齐的内存
(函数) [编辑]