zoukankan      html  css  js  c++  java
  • __attribute__ ((attribute-list))

    http://blog.csdn.net/ithomer/article/details/6566739


    构造与析构:


    #include <stdio.h> #include <stdlib.h> static __attribute__((constructor)) void before() { printf("Hello"); } static __attribute__((destructor)) void after() { printf(" World! "); } int main(int args,char ** argv) { printf("main"); return EXIT_SUCCESS; } ~
    [root@workstation2017 ~]# ./test.out
    Hellomain World!

    优先级:

    [root@workstation2017 ~]# vi test.c
    
    #include <stdio.h>
    #include <stdlib.h>
    
    
    static  __attribute__((constructor(101))) void begin101()
    {
    
        printf("Hello-101
    ");
    }
    
    static  __attribute__((constructor(102))) void begin102()
    {
    
        printf("Hello-102
    ");
    }
    
    
    static  __attribute__((destructor(150))) void end101()
    {
        printf(" World!-101
    ");
    }
    
    static  __attribute__((destructor(151))) void end102()
    {
        printf(" World!-102
    ");
    }
    
    int main(int args,char ** argv)
    {
    
        return EXIT_SUCCESS;
    }
    [root@workstation2017 ~]# ./test.out
    Hello-101
    Hello-102
     World!-102
     World!-101

    对齐属性:

    __attrubte__ ((packed)) 的作用就是告诉编译器取消结构在编译过程中的优化对齐,按照实际占用字节数进行对齐

    [root@workstation2017 ~]# vi test.c
    
    #include <stdio.h>
    #include <stdlib.h>
    #define __u8    unsigned char
    #define __u16   unsigned short
    
    struct str_struct{
            __u8    a;
            __u8    b;
            __u8    c;
            __u16   d;
    } __attribute__ ((packed));
    
    typedef struct {
            __u8    a;
            __u8    b;
            __u8    c;
            __u16   d;
    } __attribute__ ((packed)) str;
    
    typedef struct {
            __u8    a;
            __u8    b;
            __u8    c;
            __u16   d;
    }str_temp __attribute__ ((packed));
    
    typedef struct {
            __u8    a;
            __u8    b;
            __u8    c;
            __u16   d;
    }str_nopacked;
    
    int main(void)
    {
            printf("sizeof str = %d
    ", sizeof(str));
            printf("sizeof str_struct = %d
    ", sizeof(struct str_struct));
            printf("sizeof str_temp = %d
    ", sizeof(str_temp));
            printf("sizeof str_nopacked = %d
    ", sizeof(str_nopacked));
            return 0;
    }
    [root@workstation2017 ~]# ./test.xx
    sizeof str = 5
    sizeof str_struct = 5
    sizeof str_temp = 6
    sizeof str_nopacked = 6

    变量占内存大小 x64 x32差别:

     变量的长度,在不同的系统之间会有差别,64位Linux系统和32位Linux系统中,几种常见C语言变 量的长度:
                  short    int    long    long long    ptr    time_t
    32位           2         4       4          8      4        4
    64位           2         4       8          8      8        8
  • 相关阅读:
    C# 工厂
    sql server 数据库 数据DateTime 转mysql
    java 快捷工具,如何清理不需要的引用
    动态调用webservice 接口
    动态调用wcf接口服务
    下载图片出现问题
    jQuery Validation Engine 表单验证
    mvc5 知识点01
    mvc5 @RenderSection("scripts", required: false) 什么意思
    mvc5 _ViewStart.cshtml 模板页如何定义
  • 原文地址:https://www.cnblogs.com/zengkefu/p/7290195.html
Copyright © 2011-2022 走看看