Namespaces
Variants

memalignment

From cppreference.net
定义于头文件 <stdlib.h>
size_t memalignment ( const void * p ) ;
(C23 起)

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

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

一个 独立实现 需要提供 memalignment

目录

参数

p - 指向查询对齐的指针

返回值

p 的对齐值,若 p 为空指针值则为 0

注释

在常见平台上

  • 空指针被转换为整数 0
  • 指针值直接转换为虚拟地址的数值,以及
  • size_t uintptr_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)

参见

分配对齐内存
(函数)
释放先前分配的带大小和对齐方式的内存
(函数)