亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C語言對于volatile與gcc優(yōu)化的探究

 更新時間:2023年02月03日 15:07:42   作者:水火汪  
這篇文章主要介紹了C語言對于volatile與gcc優(yōu)化的探究,volatile是一個特征修飾符(type specifier) volatile的作用是作為指令關鍵字,確保本條指令不會因編譯器的優(yōu)化而省略,且要求每次直接讀值。這是百度百科的介紹,那編譯器是具體是怎么優(yōu)化的呢

volatile是一個特征修飾符(type specifier) volatile的作用是作為指令關鍵字,確保本條指令不會因編譯器的優(yōu)化而省略,且要求每次直接讀值。這是百度百科的介紹,那編譯器是具體是怎么優(yōu)化的呢。

我們知道gcc 是有O0 O1 O2 O3的優(yōu)化等級的,其中O0優(yōu)化最低,O3優(yōu)化最高。

現在看下下面一段簡單程序:

#include <stdio.h>
void task_delay(int count)
{
           count *= 50000;
           while(count--);
}
int main(int argc,char* argv[])
{
   printf("Task 0:Created!\n");
   printf("Task 0:Running ...\n");
   task_delay(1000);
    return 0;
}

不用優(yōu)化編譯下:

gcc -g  -O0 main.c

看下反匯編代碼:

objdump -d a.out

看的出來最低等級的優(yōu)化-O0 的執(zhí)行程序task_delay函數的匯編指令非常多,性能損耗長。

現在看下O1的優(yōu)化后效果:

xc@xc-virtual-machine:~$ gcc -g  -O1 main.c
xc@xc-virtual-machine:~$ objdump -d a.out

反匯編代碼:

明顯task_delay匯編指令比之前-O0優(yōu)化的時候要少,提升了執(zhí)行速度。現在在來看下-O3的優(yōu)化后的反匯編代碼

看的出是直接空指令返回的,且運行地址在1180在main函數是沒調用,這個暫時不知道怎么回事,交給后面的自己了,哈哈。

好了上面都是準備工作,目的是告訴我們-O3能將程序優(yōu)化極致。現在我們將count入參用volatile修飾,會怎樣,根據百度百科的說法是不會進行優(yōu)化的,我們測試下:

#include <stdio.h>
void task_delay(volatile int count)
{
           count *= 50000;
           while(count--);
}
int main(int argc,char* argv[])
{
   printf("Task 0:Created!\n");
   printf("Task 0:Running ...\n");
   task_delay(1000);
    return 0;
}

xc@xc-virtual-machine:~$ gcc -g  -O3 main.c
xc@xc-virtual-machine:~$ 
xc@xc-virtual-machine:~$ 
xc@xc-virtual-machine:~$ objdump -d a.out  

發(fā)現跟-O0的匯編代碼一樣,沒進行優(yōu)化。

到此這篇關于C語言對于volatile與gcc優(yōu)化的探究的文章就介紹到這了,更多相關C語言volatile與gcc內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • C++中 map的基本操作

    C++中 map的基本操作

    map是一類關聯式容器。接下來通過本文給大家分享c++中的map基本操作,需要的朋友參考下
    2017-05-05
  • C++中訪問權限的示例詳解

    C++中訪問權限的示例詳解

    C++通過 public、protected、private 三個關鍵字來控制成員變量和成員函數的訪問權限(也稱為可見性),下面這篇文章主要給大家介紹了關于C++中訪問權限的相關資料,需要的朋友可以參考下
    2021-07-07
  • 判斷兩顆二叉樹是否相似的兩種方法

    判斷兩顆二叉樹是否相似的兩種方法

    今天小編就為大家分享一篇關于判斷兩顆二叉樹是否相似的兩種方法,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • C++實現推箱子小項目

    C++實現推箱子小項目

    這篇文章主要為大家詳細介紹了C++實現推箱子小項目,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • C語言中遞歸的實際應用與經典問題

    C語言中遞歸的實際應用與經典問題

    函數以及函數的遞歸調用是學習C語言必須要掌握的內容,且遞歸作為經典的算法思想被廣泛應用于程序設計中,下面這篇文章主要給大家介紹了關于C語言中遞歸的實際應用與經典問題的相關資料,需要的朋友可以參考下
    2021-09-09
  • C語言實現控制臺五子棋小游戲

    C語言實現控制臺五子棋小游戲

    這篇文章主要為大家詳細介紹了C語言實現控制臺五子棋小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • C++可變參數的實現方法

    C++可變參數的實現方法

    可變參數給編程帶來了很大的方便,在享受它帶來的方便的同時,很有必要了解一下其實現方式,在了解編程語言的同時,也可以擴展編程的思路。
    2013-03-03
  • C語言實現的統計php代碼行數功能源碼(支持文件夾、多目錄)

    C語言實現的統計php代碼行數功能源碼(支持文件夾、多目錄)

    這篇文章主要介紹了C語言實現的統計php代碼行數功能源碼,支持文件夾、多級目錄的統計,在一些環(huán)境中會用到這個功能,需要的朋友可以參考下
    2014-08-08
  • C++ 將數據轉為字符串的幾種方法

    C++ 將數據轉為字符串的幾種方法

    這篇文章主要介紹了C++ 將數據轉為字符串的幾種方法,十分的實用,有需要的小伙伴可以參考下。
    2015-06-06
  • C語言中#define與typedef的互換細節(jié)詳解

    C語言中#define與typedef的互換細節(jié)詳解

    本篇文章是對C語言中#define與typedef的互換細節(jié)進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05

最新評論