gcc支持的优化属性(__attribute__)
时间: 2023-11-22 15:20:32 浏览: 19
GCC支持许多__attribute__属性,这些属性可以用于控制编译器的行为。以下是一些常见的优化属性:
1. optimize:指定优化级别。可以将优化级别设置为-O1、-O2、-O3或-Os,以便使用不同的优化级别。
2. hot:指定函数为热函数,表示该函数被频繁调用。编译器会把该函数编译成最优化的代码。
3. cold:指定函数为冷函数,表示该函数很少被调用。编译器会把该函数编译成最小化的代码。
4. noreturn:指定函数不会返回,这可以帮助编译器进行代码优化。
5. pure:指定函数没有任何副作用,即函数不会修改全局变量或静态变量,也不会调用不纯函数。
6. const:指定函数的结果只依赖于其输入参数,即函数不会访问任何全局变量或静态变量。
7. noinline:指定函数不应被内联。这可以帮助减小代码体积,但可能会影响性能。
8. always_inline:指定函数应该被内联。这可以提高性能,但可能会增加代码体积。
9. flatten:指定函数应该被展开。这可以提高性能,但会增加代码体积。
10. aligned:指定变量的对齐方式。可以使用__attribute__((aligned(n)))来指定变量的对齐方式为n字节。
相关问题
gcc 的 __attribute__ 关键字
__attribute__ 是GCC编译器的一个关键字,用于指定特定的属性给函数、变量或类型等。它可以用来优化代码、控制警告和错误、指定对齐方式等。通过在声明或定义之前使用__attribute__关键字,可以向编译器提供一些额外的信息和指令。
__attribute__ 关键字的语法如下:
```c
__attribute__((attribute_list))
```
其中,attribute_list 是一个逗号分隔的属性列表,每个属性的格式为attribute((specifier))。
下面是一些常用的属性和它们的作用:
- `__attribute__((packed))`:用于取消结构体成员之间的对齐,以节省内存空间。
- `__attribute__((aligned(N)))`:用于指定变量或结构体成员的对齐方式为 N 字节。
- `__attribute__((noreturn))`:用于声明函数不会返回,以帮助编译器进行优化。
- `__attribute__((unused))`:用于告诉编译器某个变量或函数可能未被使用,以避免产生警告。
- `__attribute__((deprecated))`:用于标记某个函数或类型已过时,以提醒开发者不要使用。
这只是一些常见的属性示例,GCC还支持更多的属性。具体的属性可以在GCC文档中找到相关信息。
__attribute__使用方法
__attribute__是GCC编译器提供的一种扩展语法,用于向编译器提供特定的指示或者属性。它可以用于函数、变量、类型等各种声明上,以实现一些特定的功能或者优化。
__attribute__的使用方法如下:
1. 函数属性:
- `__attribute__((noreturn))`:表示函数不会返回,比如用于标记程序的终止函数。
- `__attribute__((format(printf, arg1, arg2)))`:用于格式化字符串检查,指定函数参数的格式化方式。
- `__attribute__((constructor))`:表示函数在程序启动时自动执行。
- `__attribute__((destructor))`:表示函数在程序结束时自动执行。
2. 变量属性:
- `__attribute__((aligned(n)))`:指定变量的对齐方式,n为对齐字节数。
- `__attribute__((unused))`:表示变量未使用,避免编译器产生警告。
3. 类型属性:
- `__attribute__((packed))`:指定结构体或联合体的对齐方式为紧凑对齐,减小内存占用。
4. 其他属性:
- `__attribute__((used))`:表示变量或函数在链接过程中一定会被使用,避免被优化掉。
需要注意的是,__attribute__是GCC特有的语法扩展,不同编译器可能有不同的扩展语法或者不支持__attribute__。