2634

13 分钟

#C 语言标准库头文件 stdalign.h

这个头文件提供 内存对齐 的相关功能。

#示例

#include <stdio.h> #include <stdalign.h> // 提供 alignas, alignof, __alignas_is_defined, __alignof_is_defined 等宏 struct data { char c; alignas(16) int arr[4]; // arr 数组将按 16 字节对齐 }; int main(void) { // 检查编译器是否支持对齐特性 #ifdef __alignas_is_defined printf("编译器支持 alignas\n"); #endif #ifdef __alignof_is_defined printf("编译器支持 alignof\n"); #endif // 使用 alignof 获取类型的对齐要求 printf("char 的对齐长度为: %zu 字节\n", alignof(char)); printf("int 的对齐长度为: %zu 字节\n", alignof(int)); printf("double 的对齐长度为: %zu 字节\n", alignof(double)); printf("struct data 的对齐长度为: %zu 字节\n", alignof(struct data)); // 使用alignas指定对齐 alignas(32) int x; // x 将按32字节对齐 printf("x 的地址为: %p (按 32 字节对齐)\n", (void*)&x); // 检查结构体成员的对齐 struct data d; printf("d.arr 的地址为: %p (按 16 字节对齐)\n", (void*)&d.arr); return 0; }

运行结果:

编译器支持 alignas
编译器支持 alignof
char 的对齐长度为: 1 字节
int 的对齐长度为: 4 字节
double 的对齐长度为: 8 字节
struct data 的对齐长度为: 16 字节
x 的地址为: 0x7ffc77626660 (按 32 字节对齐)
d.arr 的地址为: 0x7ffc77626680 (按 16 字节对齐)

#

标准说明
alignasC11(在 C23 废弃)定义为关键字 _Alignas
alignofC11(在 C23 废弃)定义为关键字 _Alignof

#常量

常量标准说明
__alignas_is_definedC11(在 C23 废弃)表示定义了 alignas
__alignof_is_definedC11(在 C23 废弃)表示定义了 _Alignof

#推荐阅读

创建于 2025/6/14

更新于 2025/6/30