命名空间
变体
操作

memalignment

来自 cppreference.com
< c‎ | 程序
定义在头文件 <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)

[编辑] 另请参阅

分配对齐的内存
(函数) [编辑]
释放先前分配的已分配大小和对齐的内存
(函数) [编辑]