1. 程式人生 > >【C++】register關鍵字

【C++】register關鍵字

register:這個關鍵字請求編譯器儘可能的將變數存在CPU內部暫存器中,而不是通過記憶體定址訪問,以提高效率。注意是儘可能,不是絕對。你想想,一個CPU 的暫存器也就那麼幾個或幾十個,你要是定義了很多很多register 變數,它累死也可能不能全部把這些變數放入暫存器吧。

暫存器其實就是一塊一塊小的儲存空間,只不過其存取速度要比記憶體快得多。進水樓臺先得月嘛,它離CPU 很近,CPU 一伸手就拿到資料了,比在那麼大的一塊記憶體裡去尋找某個地址上的資料是不是快多了?那有人問既然它速度那麼快,那我們的記憶體硬碟都改成暫存器得了唄。我要說的是:你真有錢!

register修飾符暗示編譯程式相應的變數將被頻繁地使用,如果可能的話,應將其儲存在CPU的暫存器中,以加快其儲存速度

register修飾符的注意點: 
1. register變數必須是能被CPU所接受的型別。這通常意味著register變數必須是一個單個的值,並且長度應該小於或者等於整型的長度。不過,有些機器的暫存器也能存放浮點數。 
2. 因為register變數可能不存放在記憶體中,所以不能用“&”來獲取register變數的地址。 
3. 由於暫存器的數量有限,而且某些暫存器只能接受特定型別的資料(如指標和浮點數),因此真正起作用的register修飾符的數目和型別都依賴於執行程式的機器,而任何多餘的register修飾符都將被編譯程式所忽略。 
4. 在某些情況下,把變數儲存在暫存器中反而會降低程式的執行速度

。因為被佔用的暫存器不能再用於其它目的;或者變數被使用的次數不夠多,不足以裝入和儲存變數所帶來的額外開銷。 
5. 早期的C編譯程式不會把變數儲存在暫存器中,除非你命令它這樣做,這時register修飾符是C語言的一種很有價值的補充。然而,隨著編譯程式設計技術的進步,在決定那些變數應該被存到暫存器中時,現在的C編譯環境能比程式設計師做出更好的決定。實際上,許多編譯程式都會忽略register修飾符,因為儘管它完全合法,但它僅僅是暗示而不是命令

【轉載】:https://blog.csdn.net/liu537192/article/details/50194515

相關推薦

C++register關鍵字

register:這個關鍵字請求編譯器儘可能的將變數存在CPU內部暫存器中,而不是通過記憶體定址訪問,以提高效率。注意是儘可能,不是絕對。你想想,一個CPU 的暫存器也就那麼幾個或幾十個,你要是定義了很多很多register 變數,它累死也可能不能全部把這些變數放入暫存器吧。暫存器其實就是一塊一塊小的儲存空間

C++explicit 關鍵字

文章複製連結: https://baike.baidu.com/item/explicit/4941869?fr=aladdin explicit建構函式是用來防止隱式轉換的。請看下面的程式碼: class Test1 { public: Test1(int n) {

C++auto關鍵字c++11)

概念 C++11中,auto不再是一個儲存型別指示符,而是一個自動推導變數的型別,如: #include <iostream> #include <typeinfo> using namespace std; int TestAuto() { ret

C++常見關鍵字的使用場景及用法

自動變數型別 int,float,double,short,char,bool(參考基本資料長度,格式化輸出)   STL資料型別 string:字串操作,可以通過下標訪問某個字元。 list,set,map:都有點像連結串列,不可以通過下標直接訪問。 vector

c++const關鍵字小結(英文)

以後嘗試著多用英文來寫部落格,最近看python-mysql的manual真的是不太舒服,18-10-4號剛出的,100頁也沒有翻譯版本,只能硬著頭皮看英文版本的 //[c++] //"Use const whenever u need" //[variables] //

C++auto關鍵字

在早期C/C++中auto的含義是:使用auto修飾的變數,是具有自動儲存器的區域性變數。 C++11中,auto有了全新的含義即:auto不再是一個儲存型別指示符,而是作為一個新的型別 指示符來指示編譯器,auto宣告的變數必須由編譯器在編譯時期推導而得。 通俗地講,auto關鍵字是可以自

c++const關鍵字解析

首先我們來看一下為什麼要使用const呢?因為採用符號常量寫出的程式碼更容易維護;指標常常是邊讀邊移動,許多函式引數都是隻讀不謝的,const最常見的用法就是作為陣列的界和switch分情況標記(也可以用列舉符代替)。 分類: 常變數:const 型別說明符

C關鍵字void的用法

兩種 表示 數據 用法 fine 關鍵字 定義 是個 指針 void有兩種功能 【1】沒有 【2】任意類型 void出現的位置不同會有不同的解釋 【1】void func( void ) func左邊的void,代表『沒有返回值』 func右邊的括弧裏的void,代表此

C++建立物件之new關鍵字

起初剛學C++時,很不習慣用new,後來看老外的程式,發現幾乎都是使用new,想一想區別也不是太大,但是在大一點的專案設計中,有時候不使用new的確會帶來很多問題。當然這都是跟new的用法有關的。new建立類物件,使用完後需使用delete刪除,跟申請記憶體類似。所以,new有時候又不太適合,比如在

C++關鍵字

asm else new this auto enum operator throw bool explicit private tr

C#C#改變關鍵字的顏色

/// <summary> /// 改變關鍵字的顏色 /// </summary> /// <param name="key"></param> /// <param n

C/C++extern 關鍵字C/C++ 混合程式設計

extern 是一個名字修飾約定。 所謂名字修飾約定,就是指變數名、函式名等經過編譯後重新輸出名稱的規則。 C++支援函式過載,而C不支援,兩者的編譯規則也不一樣。函式被C++編譯後在符號庫中的名字與C語言的不 同。例如,假設某個函式的原型為:void fo

C/C++sizeof 關鍵字詳解

The sizeof keyword gives the amount of storage, in bytes, associated with a variable or a type (including aggregate types). This

C++從extern關鍵字開始談C語言多檔案程式設計

extern 關鍵字 我們知道,C語言程式碼是由上到下依次執行的,不管是變數還是函式,原則上都要先定義再使用,否則就會報錯。但在實際開發中,經常會在函式或變數定義之前就使用它們,這個時候就需要提前宣告。 所謂宣告(Declaration),就是告訴編譯器我要使用這個變數或函

C/C++static關鍵字

public c-based 靜態成員 說明 記憶 初始化列表 返回 類成員函數 隱藏 首先static的最主要功能是隱藏,其次因為static變量存放在靜態存儲區,所以它具備持久性和默認值0。 static性質 隱藏 當同時編譯多個文件時,未加static前綴的全局

CC語言中識別符號宣告的幾個關鍵字總結

C語言中宣告一個名稱就是把一個識別符號與某個C語言物件相關聯,如變數、函式或型別,C語言中可以宣告的名稱包括:變數、函式、型別、型別標誌、結構成員與聯合成員、列舉常量、語句標號和前處理器巨集。除了語句標

C#C#關鍵字-where(泛型型別約束)

文章參考:http://blog.csdn.net/startwithdp/article/details/25636737 http://www.cnblogs.com/soundc

C字符串常量和字符數組

gcc pre class fun 後者 一段 put light cmp 此次博客是轉載某位博主的文章,不過現在找不到了,所以先聲明一下。 先貼一段代碼: #include <stdio.h> int main(int argc, const char**

C#監測文件改變類

tco private clas 目錄修改 obj directory 設置 行修改 config using System.IO;//首先實例化一個對象 FileSystemWatcher watcher = new FileSystemWatcher(); //

C#報表制作&lt;機房重構&gt;

接下來 機房 工具 學習 test trac fcm 報表 感覺 前言 和VB須要引用其它報表軟件不同,VS自帶報表設計的功能,初次嘗試。就感受到了它的強大之處。 報表制作 話不多說。直接報表的制作過程。 1、首先,我們要先制作一個報表的