指標和區域性變數的效率有很大的差異嗎?

時間 2021-05-10 00:20:24

1樓:Zhensheng Yuan

你們放開這題目!讓我來!

第乙個問題:

前者兩個區域性變數,後者乙個,所以前者的確是使用了更多儲存空間。

第二個問題:

首先,訪問效率最高的是暫存器,其次是CPU內建的快取,再之主存,即物理記憶體。

dobule h/high是區域性變數,而且函式內區域性變數數量少,很明顯兩者的double h/high都會被編譯器使用暫存器儲存。

第一種方式,暫存器儲存了first的值,每次比值,都直接讀取暫存器,只需要一次操作。

第二種方式,暫存器儲存的是first的主存位址!每次比較,都需要讀取一次暫存器,再讀取一次主存!

當然,first可能會被快取命中,情況可能會好點。

找了Core i7 Xeon 5500系列的資料:

暫存器的訪問能以乙個CPU週期完成。

快取在四個週期以上,且隨Level增大。

主存約為一百二十週期。

所以,孰優孰劣?

2樓:羊牮

增加變數就增加消耗的空間,不知道是指什麼的消耗。

但是著意這個,方向大半是錯的。最好你先預估一下,你的目標程式執行在什麼CPU上,會有多少暫存器。真要在意就去看優化後的彙編長什麼樣。

像這麼小的函式,多那麼點變數,優化時一般都是放暫存器裡的。暫存器放在那裡,不用也是空放著。所以這裡一般不存在什麼多餘的消耗。

要說區別,第一種更方便編譯器優化,第二種更可讀。

3樓:朱涵俊

為什麼我覺得這2個函式邏輯並不相同,如果全是小於-1的,等乙個會返回未初始化的指標。

至於效率,臨時變數是暫存器,指標可以是暫存器,但取值要指令,效率沒有臨時變數快。

Python全域性變數和區域性變數的問題?

留德華叫獸 sum 5 def add x,y print sum sum x y 這個報錯的原因是 同乙個方程scope下,變數sum僅可能是區域性或者全域性add方程並沒有宣告sum是全域性變數 所以第二行實際上是建立並賦值了乙個區域性變數sumsum x y 那麼在add方程下,sum只可能是...

區域性變數的指標都在棧中,那堆中能否有指標?

問題的第一句錯了,是區域性變數通常儲存在棧中.或者說,指向區域性變數的指標,對應的位址在棧裡.所以問題可以改為 區域性變數在棧中,那堆中能否有變數?變數可以儲存在堆裡,如何實現 用malloc分配等量的記憶體,並使用它儲存物件 將malloc的返回值void 型別轉換為變數型別 並初手動始化,或者常...

PHP裡函式的引數變數是區域性變數嗎?

是,加global識別符號才是全域性變數,另外,php與js一樣無塊作用域,有函式作用域,這點要注意,比如for迴圈中unset全域性變數不需要加global var eechen 但要注意,引數以引用傳遞 進來的話,則該引數變數不會在函式結束時釋放記憶體.比如物件作為函式引數時預設就是引用傳遞,不...