gcc扩展之类型属性

引用

  1. gcc5.5 在线手册

属性描述

aligned (alignment)

将结构体的大小与alignment对齐,比如结构体

struct __attribute__((aligned(8))) test
{
    int i;
    char c;
    int j;
};

如果结构体中的变量 i, c , j 都赋值为1。在内存中查看到的layout分别如下:

  • 对齐前为12字节
    1 0 0 0 1 0 0 0 1 0 0 0

  • 对齐后为16字节
    1 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0

如果想对齐结构体内某个域,例如在使用netlink时,要求消息的首部必须对齐。可以这样写

struct nlmsg {
    struct __attribute__((aligned(NLMSG_ALIGNTO))){
        struct nlmsghdr nl_hdr;
    };
    struct cn_msg cn_msg;
    enum proc_cn_mcast_op cn_mcast;
};

这样组装出来的消息,头部(nlmsghdr)就是自动对齐的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容