美文网首页
gcc扩展之类型属性

gcc扩展之类型属性

作者: c096c893940b | 来源:发表于2018-02-26 16:06 被阅读0次

    引用

    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)就是自动对齐的。

    相关文章

      网友评论

          本文标题:gcc扩展之类型属性

          本文链接:https://www.haomeiwen.com/subject/eijyxftx.html