优化gcc

优化gcc

目的是改善程序的执行性能,通过编译选项(On)来控制优化代码生成,(n)是一个代表优化级别的整数,

典型的有(0, 1, 2, 3) 其中(-O)等价于(-O_1),

(-O)或(-O_1)编译时告诉gcc同时减少代码长度和执行时间, 一般是线程跳转或者延迟退栈

(-O_2) 是完成 (-O_1) 的工作外还要做一些额外工作,比如处理器调度等

(-O_3) 是完成 (-O_2) 的工作外,还要做包括循环展开和一些与处理器相关的优化工作

一般来说(n)越大,优化等级越高

比如如下这一个程序test.c

#include
int main()
{
    unsigned long int counter;
    unsigned long int result;
    unsigned long int temp;
    unsigned long int five;
    for(counter = 0; counter < 2022 * 2022 * 100/4 + 2023; counter += (10 - 6) / 4)
    {
        temp=counter / 1979;
        for (int i = 0; i < 20; i ++)
        {
            five = 200 * 200 / 8000;
        }
        result = counter;
    }
    printf("Result is %ld\n", result);
    return 0;
}

首先不加任何优化进行编译

gcc -Wall test.c -o in test             # Wall &#x662F;&#x4E3A;&#x4E86;&#x8BA9;gcc&#x663E;&#x793A;&#x66F4;&#x591A;&#x7684;&#x8B66;&#x544A;
time ./test                             # &#x663E;&#x793A;&#x5404;&#x9636;&#x6BB5;&#x6267;&#x884C;&#x65F6;&#x95F4;&#xFF0C; &#x4F18;&#x5316;&#x901A;&#x8FC7;&#x8FD9;&#x4E2A;&#x4F53;&#x73B0;

执行结果如下

优化gcc

说明

real    &#x8FDB;&#x7A0B;&#x603B;&#x7684;&#x6267;&#x884C;&#x65F6;&#x95F4;
user    &#x88AB;&#x6D4B;&#x91CF;&#x7684;&#x8FDB;&#x7A0B;&#x4E2D;&#x7684;&#x7528;&#x6237;&#x6307;&#x4EE4;&#x6267;&#x884C;&#x65F6;&#x95F4;
sys     &#x88AB;&#x6D4B;&#x91CF;&#x8FDB;&#x7A0B;&#x4E2D;&#x5185;&#x6838;&#x4EE3;&#x7528;&#x6237;&#x6267;&#x884C;&#x7684;&#x65F6;&#x95F4;
sys &#x548C; user &#x7684;&#x548C;&#x88AB;&#x79F0;&#x4E3A;CPU&#x65F6;&#x95F4;

加上(-O1)优化

gcc -Wall -O1 test.c -o in test
time ./time

优化gcc

其他两种

优化gcc

Original: https://www.cnblogs.com/wojiuyishui/p/16660175.html
Author: 我就一水
Title: 优化gcc

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/578656/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • jenkins pipeline中获取shell命令的输出

    //获取标准输出//第一种result = sh returnStdout: true ,script: ” Original: https://www.cnblogs…

    Linux 2023年5月28日
    085
  • Go channel使用注意事项

    说道这里,还是总结下channel的几个特性吧: 给一个 空 channel发送数据,会造成永远阻塞 从一个 空 channel接收数据,会造成永远阻塞 给一个已经关闭的chann…

    Linux 2023年6月6日
    095
  • 网络设备配置–9、利用ppp协议实现点对点认证

    一、前言 同系列前几篇:网络设备配置–1、配置交换机enable、console、telnet密码网络设备配置–2、通过交换机划分vlan网络设备配置&#8…

    Linux 2023年6月8日
    086
  • Shell第四章《正则表达式》

    1.1、名词解释 正则表达式(regular expression, RE)是一种字符模式,用于在查找过程中匹配指定的字符。在大多数程序里,正则表达式都被置于两个正斜杠之间;例如/…

    Linux 2023年6月6日
    0102
  • Snap Build Your Own Block修炼之道-添加自定义类别

    Snap Build Your Own Block自我修炼方法:1、所有的面向对象,其实是对面向过程的抽象过程而已; 2、面对别人的开源项目时,需要找准源头(即项目运行的起点,当然…

    Linux 2023年6月6日
    095
  • kafka-部署

    kafka部署 版本选择: Scala 2.12-kafka_2.12-2.7.0.tgz #版本格式 kafka_scala版本_kafka版本 部署三台服务器的高可用kafka…

    Linux 2023年6月14日
    0100
  • shell脚本并发执行

    简单的并发脚本 如果shell不能执行,或者报格式错误,记得用 Original: https://www.cnblogs.com/phpdragon/p/10511256.htm…

    Linux 2023年5月28日
    096
  • Python——装饰器(Decorator)

    1.什么是装饰器? 装饰器放在一个函数开始定义的地方,它就像一顶帽子一样戴在这个函数的头上。和这个函数绑定在一起。在我们调用这个函数的时候,第一件事并不是执行这个函数,而是将这个函…

    Linux 2023年6月8日
    0133
  • [20210917]ssh: error while loading shared libraries: libcrypto.so.1.0.0.txt

    [20210917]ssh: error while loading shared libraries: libcrypto.so.1.0.0.txt –//以后写一些…

    Linux 2023年5月27日
    0129
  • Linux基础学习(三)

    [root@ct7 ~]# grep -vc “/sbin/nologin” /etc/passwd [root@ct7 ~]# grep -v “/sbin/nologin” /…

    Linux 2023年6月8日
    082
  • MySQL 批量修改库、表、列的排序规则

    1.表字段修复 SELECT TABLE_SCHEMA ‘数据库’, TABLE_NAME ‘表’, COLUMN_NAME ‘字段’, CHARACTER_SET_NAME ‘原…

    Linux 2023年6月7日
    081
  • Linux中的RCU机制

    什么是RCU? RCU(Read-Copy Update),顾名思义就是读-拷贝-修改,它是基于其原理命名的。对于被RCU保护的共享数据结构,读者不需要获得任何锁就可以访问它,但写…

    Linux 2023年6月13日
    0110
  • Redis 内存模型

    前言 Redis是目前最火爆的内存数据库之一,通过在内存中读写数据,大大提高了读写速度,可以说Redis是实现网站高并发不可或缺的一部分。 我们使用Redis时,会接触Redis的…

    Linux 2023年5月28日
    0117
  • Linux通过ssh命令连接远程服务器

    命令使用语法:1,指定用户:ssh -l root 192.168.0.11或则ssh root@192.168.0.11 2,如果修改过ssh登录端口的可以:ssh -p 123…

    Linux 2023年6月13日
    068
  • 非常实用的 Shell 脚本

    检测两台服务器指定目录下的文件一致性 #!/bin/bash<br>#####################################<br>#&a…

    Linux 2023年5月28日
    069
  • Redis源码系列(二)

    Redis源码系列——双链表 redis底层的数据结构使用了双链表,其实现很简洁,值得阅读。 原型 src/adlist.h /*list node*/ typedef struc…

    Linux 2023年6月8日
    0106
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球