欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
C語(yǔ)言的5種存儲類(lèi)以及關(guān)鍵字volatile、restrict
    《C Primer Plus》讀到12章,我的C語(yǔ)言復習進(jìn)展的挺不錯。這一章介紹存儲類(lèi)、連接和內存管理,可以說(shuō)是重中之重。
C的5種存儲類(lèi):
自動(dòng)——在一個(gè)代碼塊內(或在一個(gè)函數頭部作為參量)聲明的變量,無(wú)論有沒(méi)有存儲類(lèi)修飾符auton,都屬于自動(dòng)存儲類(lèi)。該類(lèi)具有自動(dòng)存儲時(shí)期、代碼塊的作用域和空鏈接(no linkage),如未初始化,它的值是不確定的(java要求局部變量必須初始化)

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

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

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

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

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

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

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

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

而par并不是訪(fǎng)問(wèn)數組ar的唯一方式,因此并不能進(jìn)行下面的優(yōu)化:
   par[n]+=8;
因為在par[n]+=3前,ar[n]*=2進(jìn)行了改變。使用了關(guān)鍵字restric,編譯器就可以放心地進(jìn)行優(yōu)化了。這個(gè)關(guān)鍵字據說(shuō)來(lái)源于古老的FORTRAN。有興趣的看看這個(gè)。
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
C語(yǔ)言中const,volatile,restrict的用法總結
C語(yǔ)言
關(guān)于編譯器優(yōu)化的兩個(gè)類(lèi)型限定詞:volatile和restrict
C/C++關(guān)鍵詞 - volatile
DSP編程技巧之17
[轉]構造函數為什么不能被abstract/static/final/native/stricftp/synchronized修飾 及 一些關(guān)鍵字的用法
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久