memalignment

来自cppreference.com
< 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 The memalignment function (第 374 页)

参阅

分配对齐的内存
(函数)
归还之前分配的指定大小和对齐的内存
(函数)