gcc对printf的优化

13 篇文章 0 订阅

printf输出的是一整行时,gcc将调用puts而不是printf

#include <stdio.h>
int main(void){
    printf("hello\n");
    return 0;
}

对应汇编代码为


然而,clang将仍然调用printf

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
gcc支持很多用于优化的属性(__attribute__),以下是其中一些常见的: 1. `__attribute__((pure))`: 声明函数没有任何副作用,即函数只依赖于它的输入参数,不会修改任何全局变量或静态变量。 2. `__attribute__((const))`: 声明函数没有任何副作用,并且函数的返回值只依赖于它的输入参数,不会受任何全局变量或静态变量的影响。 3. `__attribute__((noreturn))`: 声明函数不会返回,例如在函数内部调用了exit(),abort()等函数。 4. `__attribute__((deprecated))`: 声明函数或变量已经被弃用,不推荐使用。 5. `__attribute__((aligned(n)))`: 声明变量的内存对齐方式,n表示对齐字节数。 6. `__attribute__((optimize("O0/O1/O2/O3")))`: 声明函数的优化级别,O0表示不优化,O1表示优化速度,O2表示平衡性能和大小,O3表示优化大小。 7. `__attribute__((packed))`: 声明结构体或联合体的内存对齐方式为紧凑模式,即不填充字节。 8. `__attribute__((visibility("default/hidden/internal")))`: 声明符号的可见性,default表示符号可见,hidden表示符号不可见,internal表示符号只在当前模块内可见。 9. `__attribute__((format(printf, x, y)))`: 声明函数参数的格式化输出方式,x表示参数从第几个开始,y表示参数的总数。 10. `__attribute__((unused))`: 声明变量或函数未被使用,但是不产生警告。 以上是一些常见的gcc支持的优化属性(__attribute__),还有其他更多的属性可以根据需要使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值