欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

現(xiàn)在看下下面一段簡單程序:

#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函數(shù)的匯編指令非常多,性能損耗長。

現(xiàn)在看下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í)行速度。現(xiàn)在在來看下-O3的優(yōu)化后的反匯編代碼

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

好了上面都是準(zhǔn)備工作,目的是告訴我們-O3能將程序優(yōu)化極致?,F(xiàn)在我們將count入?yún)⒂胿olatile修飾,會怎樣,根據(jù)百度百科的說法是不會進(jìn)行優(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ā)現(xiàn)跟-O0的匯編代碼一樣,沒進(jìn)行優(yōu)化。

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

相關(guān)文章

  • C++中 map的基本操作

    C++中 map的基本操作

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

    C++中訪問權(quán)限的示例詳解

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

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

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

    C++實(shí)現(xiàn)推箱子小項(xiàng)目

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

    C語言中遞歸的實(shí)際應(yīng)用與經(jīng)典問題

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

    C語言實(shí)現(xiàn)控制臺五子棋小游戲

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

    C++可變參數(shù)的實(shí)現(xiàn)方法

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

    C語言實(shí)現(xiàn)的統(tǒng)計php代碼行數(shù)功能源碼(支持文件夾、多目錄)

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

    C++ 將數(shù)據(jù)轉(zhuǎn)為字符串的幾種方法

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

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

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

最新評論