优化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)

大家都在看

  • 关于 Promise 的一些简单理解

    一、ES6 中的 Promise 1、JS 如何解决 异步问题? (1)什么是 同步、异步?同步指的是 需要等待 前一个处理 完成,才会进行 下一个处理。异步指的是 不需要等待 前…

    Linux 2023年6月11日
    0118
  • redis的 分布式锁 golang/erlang 简单实现

    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% import (% “redigo/redis”% ) %…

    Linux 2023年5月28日
    0117
  • 计算机系统实验

    实验三 一 实验目的 理解堆栈结构,利用缓冲区进行代码攻击 二 准备工作 配置实验环境(IDA、gcc),阅读实验指导书 三 实验过程 0x01第一关 首先理解堆栈的结构 /* 第…

    Linux 2023年6月8日
    0100
  • [数据库]ACID、CAP、BASE特性

    SQL与noSQL 对比项 关系型SQL 非关系型SQL 关系表 数据集(键值/JSON文档/哈希表/其它) 结构化、提前定义表结构 动态调整模式,非结构化 纵向扩展,提高处理能力…

    Linux 2023年6月13日
    094
  • Vim配置文件-详解(.vimrc)

    Vim配置文件的作用 Vim启动时,会根据配置文件(.vimrc)来设置 Vim,因此我们可以通过此文件来定制适合自己的 Vim 所有系统用户在启动Vim时,都会加载这个配置文件。…

    Linux 2023年6月13日
    093
  • 红警快捷键图示

    最近,实验室的同学们 周末偶尔会玩一玩红警,回忆一下童年,挺愉快的。下面记录一下快捷键,方便操作; 看到B站上红警08,还有对应的快捷键教学视频,也可以直接学习一下; https:…

    Linux 2023年6月14日
    0133
  • MySQL PXC集群的实现

    MHA:一主多从,主节点挂了就提升一个从节点作为主节点。 缺点:提升从节点为主节点需要时间,且只有一个节点能进行写操作,所以写的性能不高。 双主架构:两个主节点,两个节点都能进行读…

    Linux 2023年6月7日
    086
  • Postman 正确使用姿势

    前言: 请各大网友尊重本人原创知识分享,谨记本人博客:南国以南i 简介: Postman是一个接口测试工具,在做接口测试的时候,Postman相当于一个客户端,它可以模拟用户发起的…

    Linux 2023年6月14日
    085
  • 4.5 Linux压缩文件或目录中文件为.gz格式(gzip命令)

    gzip 是 Linux 系统中经常用来对文件进行压缩和解压缩的命令,通过此命令压缩得到的新文件,其扩展名通常标记为”.gz”。 再强调一下,gzip 命令…

    Linux 2023年6月7日
    091
  • LeetCode 907: 子数组的最小值之和-单调栈的运用 |Sum of Subarray Minimums-Fantasy use of Monotonic Stack

    Tags: #MonoStack #Stack Problem Description Given an array of integers arr, find the sum o…

    Linux 2023年6月13日
    077
  • Linux-shell

    shell 为注释 !执行脚本的 解释器 为bash 权限问题 remark 调试 bash -x man test 变量 —>默认必须全局变量 局部变量必须给local a…

    Linux 2023年6月7日
    086
  • ELK时间戳

    ELK时间戳 在我们使用ELK过程中,总会遇到时间戳的问题。首先 logstash如果没有加以处理的话,那么它默认使用的是采集的时间戳,然后存入 ES。那么这样的话时间显示的是错误…

    Linux 2023年6月8日
    0109
  • IDEA链接MySQL报错:服务器返回无效时区

    Server returns invalid timezone. Go to ‘Advanced’ tab and set ‘serverTim…

    Linux 2023年6月14日
    0115
  • 中土批量运维神器《ps1屠龙刀》 pk 西域批量运维圣器《ansible圣火令》

    据故老相传,运维界有句话:”脚林至尊,宝刀【ps1屠龙】,号令被控,莫敢不从”。 https://gitee.com/chuanjiao10/kasini3…

    Linux 2023年6月14日
    0120
  • k8s多集群切换:使用kubeconfig文件管理多套kubernetes(k8s)集群

    一.系统环境 二.前言 三.kubeconfig文件 四.kubernetes(k8s)多集群切换 一.系统环境 服务器版本 docker软件版本 CPU架构 CentOS Lin…

    Linux 2023年6月7日
    0143
  • Python垃圾回收和Linux Copy-on-Write机制

    前言 在口袋助理看到了其他部门的同事针对Python2内存占用做的一点优化工作,自己比较感兴趣,遂记录下。 Linux fork简介 fork是Linux提供的创建子进程的系统调用…

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