static和Volatile的區別

時間 2021-08-30 09:30:39

1樓:河南省中澳出入境服務

volatile

volatile關鍵字是一種型別修飾符,用它宣告的型別變數表示可以被某些編譯器未知的因素更改,比如:作業系統、硬體或者其它執行緒等。遇到這個關鍵字宣告的變數,編譯器對訪問該變數的**就不再進行優化,從而可以提供對特殊地址的穩定訪問。

使用該關鍵字的例子如下:

int volatile nvint;

當要求使用volatile 宣告的變數的值的時候,系統總是重新從它所在的記憶體讀取資料,即使它前面的指令剛剛從該處讀取過資料。而且讀取的資料立刻被儲存。

static 和 volatile 的區別

2樓:娜莉

volatile是一個型別修飾符(type specifier)。它是被設計用來修飾被不同執行緒訪問和修改的變數。如果不加入volatile,基本上會導致這樣的結果:

要麼無法編寫多執行緒程式,要麼編譯器失去大量優化的機會。

volatile的作用是: 作為指令關鍵字,確保本條指令不會因編譯器的優化而省略,且要求每次直接讀值.

c++與c#的static有兩種用法:程序導向程式設計中的static和麵向物件程式設計中的static。前者應用於普通變數和函式,不涉及類;後者主要說明static在類中的作用.

static作用:static靜態變數宣告符。在宣告它的程式塊,子程式塊或函式內部有效,值保持,在整個程式期間分配儲存器空間,編譯器預設值0。

static和extern的區別

static 和 visibility hidden 的區別

3樓:南京新華電腦專修學院

做 c 的人都知道如果所定義函式只在本檔案中用,那麼應該宣告為 static

但看 android 看 bionic 的** bionic/libc/bionic/pthread.c 發現有這樣的**片段

[html] view plain copy

1269 __libc_hidden__

1270 int pthread_mutex_unlock_impl(pthread_mutex_t *mutex)

1271 {

1272 int mvalue, mtype, tid, oldv, shared;

1273

1274 if (__unlikely(mutex == null))

1275 return einval;

1276

1277 mvalue = mutex->value;

1278 mtype = (mvalue & mutex_type_mask);

1279 shared = (mvalue & mutex_shared_mask);

既然此函式給本檔案其他**用的,為何不直接定義為 static

[html] view plain copy

#define __libc_hidden__ \

__attribute__ ((visibility ("hidden")))

查資料得知,原來 hidden 功能是讓函式在本 share libs 之外不可見, 就是說本庫中應該還有其他 檔案(unit)使用到這個函式

search 之,果然發現

pthread_debug.c 451 extern int pthread_mutex_unlock_impl(pthread_mutex_t *mutex);

[html] view plain copy

458 return pthread_mutex_unlock_impl(mutex);

nt pthread_mutex_unlock_impl(pthread_mutex_t *mutex) function

全域性變數和static全域性變數的區別

安三羊舌凝然 static修飾的成員變數,在類載入的時候就會分配空間,從屬於類,所有的物件共享這一個變數 而普通的成員變數從屬於物件,每個物件都有自己的變數 旁丹聞晴霞 你說的普通全域性變數指的是包含在 塊中的?中,static 與 中 的區別在於static在例項化時只能被執行一次,比如定義stu...

c語言中volatile關鍵字是什麼含義怎麼辦呢

影者東昇 c c 中的 volatile 關鍵字和 const 對應,用來修飾變數,通常用於建立語言級別的 memory barrier。volatile 關鍵字是一種型別修飾符,用它宣告的型別變數表示可以被某些編譯器未知的因素更改,比如 作業系統 硬體或者其它執行緒等。遇到這個關鍵字宣告的變數,編...

C語言中static變數的賦值問題

小夏在深圳 static int a 0 執行期時初始化一次,下次再呼叫時,不進行初始化工作如下 printf d a a int main staticlocalvar 第一次呼叫,輸出a 0 staticlocalvar 第二次呼叫,記憶了第一次退出時的值,輸出a 1 return 0 擴充套件...