C语言中的__attributes__

__attributes__()是GNU C支持的一个机制,因此使用该机制需要确保GNU C标准适用于你的编译器,__attributes__()可放置在函数、变量或类型的声明前,从而使得编译器对该内容进行某些特殊处理。

例如:在Function前使用

constructor destructor

使用constructor(构造)会使该方法在运行main()方法前被自动调用,相同的destructor会使该方法在main()方法运行后或者exit()方法运行之后被自动调用(注:atexit()方法也可做到main执行后调用)。

linux 行 elf程序链接、启动过程如下图:

调试QEMU中对应部分程序:

实际上,使用constructor属性,使得该函数在__libc_csu_init()中被调用,在main方法被调用之前,由此可看出__attributes__机制可以影响编译器,是一个编译器相关的特性,需要编译器支持。