一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

C語言的5種存儲(chǔ)類以及關(guān)鍵字volatile、restrict

 e3399 2012-04-29
    《C Primer Plus》讀到12章,我的C語言復(fù)習(xí)進(jìn)展的挺不錯(cuò)。這一章介紹存儲(chǔ)類、連接和內(nèi)存管理,可以說是重中之重。
C的5種存儲(chǔ)類:
自動(dòng)——在一個(gè)代碼塊內(nèi)(或在一個(gè)函數(shù)頭部作為參量)聲明的變量,無論有沒有存儲(chǔ)類修飾符auton,都屬于自動(dòng)存儲(chǔ)類。該類具有自動(dòng)存儲(chǔ)時(shí)期、代碼塊的作用域和空鏈接(no linkage),如未初始化,它的值是不確定的(java要求局部變量必須初始化)

寄存器——在一個(gè)代碼塊內(nèi)(或在一個(gè)函數(shù)頭部作為參量)使用修飾符register聲明的變量屬于寄存器存儲(chǔ)類。該類與自動(dòng)存儲(chǔ)類相似,具有自動(dòng)存儲(chǔ)時(shí)期、代碼塊作用域和空連接,聲明為register僅僅是一個(gè)請(qǐng)求,而非命令,因此變量仍然可能是普通的自動(dòng)變量,但是仍然無法獲取地址。。如果沒有被初始化,它的值也是未定的。

靜態(tài)、空鏈接——在一個(gè)代碼塊內(nèi)使用存儲(chǔ)類修飾符static聲明的局部變量屬于靜態(tài)空連接存儲(chǔ)類。該類具有靜態(tài)存儲(chǔ)時(shí)期、代碼塊作用域和空鏈接,僅在編譯時(shí)初始化一次。如未明確初始化,它的字節(jié)將被設(shè)定為0.

靜態(tài)、外部鏈接——在所有函數(shù)外部定義、未使用static修飾的變量屬于靜態(tài)、外部鏈接存儲(chǔ)類。改類具有靜態(tài)存儲(chǔ)時(shí)期、文件作用域和外部鏈接,僅在編譯時(shí)初始化一次。如未明確初始化,它的字節(jié)也被設(shè)定為0.

靜態(tài)、內(nèi)部鏈接——與靜態(tài)、外部鏈接存儲(chǔ)類不同的是,它使用static聲明,也定義在所有函數(shù)外部,但是具有內(nèi)部鏈接(僅能被與它在同一個(gè)文件的函數(shù)使用),僅在編譯時(shí)初始化一次。如未明確初始化,它的字節(jié)也被設(shè)定為0.

兩個(gè)關(guān)鍵字:volatile和restrict,兩者都是為了方便編譯器的優(yōu)化。

volatile告訴編譯器該被變量除了可被程序修改意外還可能被其他代理修改,因此,當(dāng)要求使用volatile 聲明的變量的值的時(shí)候,系統(tǒng)總是重新從它所在的內(nèi)存讀取數(shù)據(jù),而不是使用寄存器中的緩存。比如
val1=x;
val2=x;
如果沒有聲明volatile,系統(tǒng)在給val2賦值的時(shí)候可能直接從寄存器讀取x(假定聰明的編譯器優(yōu)化了),而不是從內(nèi)存的初始位置,那么在兩次賦值之間,x完全有可能被被某些編譯器未知的因素更改(比如:操作系統(tǒng)、硬件或者其它線程等)。如果聲明為volatile,編譯器將不使用緩存,而是每次都從內(nèi)存重新讀取x。

而restrict是c99引入的,它只可以用于限定指針,并表明指針是訪問一個(gè)數(shù)據(jù)對(duì)象的唯一且初始的方式,考慮下面的例子:
int ar[10];
int * restrict restar=(int *)malloc(10*sizeof(int));
int *par=ar;

這里說明restar是訪問由malloc()分配的內(nèi)存的唯一且初始的方式。par就不是了。
那么:
for(n=0;n<10;n++)
{
   par[n]+=5;
   restar[n]+=5;
   ar[n]*=2;
   par[n]+=3;
   restar[n]+=3;
}
因?yàn)閞estar是訪問分配的內(nèi)存的唯一且初始的方式,那么編譯器可以將上述對(duì)restar的操作進(jìn)行優(yōu)化:
   restar[n]+=8;

而par并不是訪問數(shù)組ar的唯一方式,因此并不能進(jìn)行下面的優(yōu)化:
   par[n]+=8;
因?yàn)樵趐ar[n]+=3前,ar[n]*=2進(jìn)行了改變。使用了關(guān)鍵字restric,編譯器就可以放心地進(jìn)行優(yōu)化了。這個(gè)關(guān)鍵字據(jù)說來源于古老的FORTRAN。有興趣的看看這個(gè)。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    中文字幕无线码一区欧美 | 久久99精品日韩人妻| 婷婷激情四射在线观看视频| 久久精品国产第一区二区三区| 人人妻在人人看人人澡| 亚洲日本久久国产精品久久| 国产精品欧美在线观看| 国产精品欧美一级免费| 日本午夜免费观看视频| 在线免费观看一二区视频| 婷婷亚洲综合五月天麻豆| 欧美人与动牲交a精品| 男人和女人草逼免费视频| 亚洲品质一区二区三区| 女人高潮被爽到呻吟在线观看| 可以在线看的欧美黄片| 久久热麻豆国产精品视频| 免费啪视频免费欧美亚洲| 国产精品欧美一级免费| 女厕偷窥一区二区三区在线| 女人高潮被爽到呻吟在线观看| 中文文精品字幕一区二区| 成人亚洲国产精品一区不卡| 极品少妇嫩草视频在线观看| 欧美日韩亚洲国产精品| 色播五月激情五月婷婷| 欧美人禽色视频免费看 | 日本99精品在线观看| 久久大香蕉一区二区三区| 国产精品激情在线观看| 九九热精彩视频在线免费 | 中文字幕免费观看亚洲视频| 国产精品日韩精品最新| 亚洲另类欧美综合日韩精品| 欧美不卡一区二区在线视频| 中文字幕一二区在线观看| 欧美日韩国产午夜福利| 久久机热频这里只精品| 亚洲国产精品久久琪琪| 欧美欧美日韩综合一区| 日本亚洲精品在线观看|