国际访客建议访问 Primers 编程伙伴 国际版站点 > C 教程 > stdalign.h 以获得更好的体验。

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

请查看 C 语言标准库头文件列表 了解更多相关 API。

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

# 示例

#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 字节对齐)

#

标准 说明
alignas C11(在 C23 废弃) 定义为关键字 _Alignas
alignof C11(在 C23 废弃) 定义为关键字 _Alignof

# 常量

常量 标准 说明
__alignas_is_defined C11(在 C23 废弃) 表示定义了 alignas
__alignof_is_defined C11(在 C23 废弃) 表示定义了 _Alignof

# 推荐阅读

本文 更新于: 2025-11-27 09:38:06 创建于: 2025-11-27 09:38:06