static和Volatile的區別

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

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

php中static靜態變數和普通變數的區別

愛笑的高大傻 php中static 靜態變數和普通變數的區別 在變數的前面加上static 就構成了靜態變數 static 變數 static變數和普通變數的區別在於非靜態全域性變數的作用域是整個源程式,當一個源程式由多個原始檔組成時,非靜態的全域性變數在各個原始檔中都是有效的。而靜態全域性變數則限...

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

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

函式中能定義區域性static變數嗎,為什麼不行

凌培勇 為什麼你要在函式裡定義static呢,statis 是類變數,在類初始化的時候就要載入 這跟jvm執行機制有關,定義static之後表明在執行程式前,就要自動對其進行初始化,你的static變數寫在了非static方法中,jvm不會在程式執行前就初始化這個方法,但是裡面又包含了需要初始化的變...