C++中的存儲技術

/*
 *C++中的存儲技術
 *我們來討論C++的存儲技術包括C++的存儲類型,C++存取修飾符和C++對象的生存期三部分
 *C++存儲類型
 *主要有三種類型:
 *extern存儲,static存儲,regsiter存儲類型
 *1.extern存儲類型
 *由於C語言允許將分別編譯的大程序的各個模塊連接在一起,以提高編譯速度,協作大項目管理
 *因此必須將程序需要的所有的全局變量通過某種方法告知所有的文件。
 *解決以上問題的方法是:在一個文件中說明所有的全局變量,在另一個文件中使用extern再次
 *描述他們。當在函數內部使用同一個全局變量。而它又在同一個文件內說明時,可以選用extern
 *但一般很少這麼做,在C++面向對象編程中,這種方法已經基本不再使用了,而只是在C語言的源代碼
 *中經常還可以看見這種方法的身影。
 *2.static存儲類型
 *靜態變量不論在函數中或在文件中都是穩定的變量。靜態局部變量可以使編譯程序產生於全局變量
 *相同的永久性存儲區,其差異是靜態局部變量僅對於說明它的模塊內可知。
 *靜態局部變量對於生成C語言的獨立函數時非常重要的,因爲有時候有些子程序必須在調用時保留區值
 *例如:過去的數字爲基數產生一個新值得數值序列發生器,如下程序:
 *int series(void)
 *{
 *  static int series_num;
 *  series_num += 2;
 *  return (series_num);
 *}
 *用戶可以給靜態局部變量賦初值,這個值僅制定一次,如下程序:
 *int series(void)
 *{
 *  static int series_num = 100;
 *  series_num += 23;
 *  return (series_num);
 *}
 *將分類型static用於全局變量,會使編譯程序建立起僅在說明該全局變量的文件中可以認知的全局。
 *因此,在靜態局部變量不能滿足要求的場合,就可以將需要使用靜態全局變量的函數寫成一個小文件
 *進行單獨編譯而不必擔心副作用。
 *靜態變量允許程序員能將程序的以部分隱藏起來,這對於管理一個很大很複雜的程序非常有效。
 *存儲類型static可以使程序員寫出十分通用的函數,這些函數可以放入庫中以備後用。
 *3.regsiter存儲類型
 *這種存儲類型僅僅用於int 和char類型變量。通常,regsiter要求編譯程序將它說明的變量值保存起來
 *保存在CPU的寄存器中,這樣其運算速度就會大大快於普通的變量。
 *regsiter僅可以用於局部變量和函數的形式參數,因爲這些變量和字符存儲在CPU的寄存器中,都是缺省的自動變量
 *由於regsiter可以提高速度,因此它是最理想的循環控制變量。但是在實際應用中,由於同一時刻獲取優化速度的regsiter
 *變量有限。
 *
*/
/*
 *C++的存取修飾符
 *主要有:const--常數型,volatile--暫態型
 *1.const--常數型
 *const型變量在程序執行期間是不可以改變的,編譯程序可以隨意的將這些變量放到只讀存儲器Rom中
 *const用途:可以阻止參數被修改,即當一個指針傳送給一個函數後,函數可能修改該指針所指向的變量,然而,如果指針在參數說明段
 *用const修飾,函數就無法修改指針所指的內容了。
 *通常,當一個標準庫函數不必修改調用參數指引的對象時,參數則用const來修飾,
 *2.volatile
 *volatile通知編譯器:變量值可能由程序中沒有顯示說明的方式所改變。
 *全局變量的地址可能被傳遞到操作系統的時針子程序,用來保存系統實時時間。
 *引用修飾符volatile的原因:大多數C編譯程序都假定表達式內部的內容不變,並以這一假定來自動優化某些表達式。
 *有些編譯程序都假定表達式內部的內容不變,並以這一假定來自動優化某些表達式。有些編譯程序在編譯時還有改變表達式的計算順序,volatile
 *可以防止這些改變發生。
 *const 和volatile可以一起使用,例如:如果假定0x80是僅由外部條件改變的端口的值,那麼下面說明既可以消除用戶希望防止的說有偶發副作用:
 *const volatile unsigned char * port=0x80;
*/

發佈了72 篇原創文章 · 獲贊 14 · 訪問量 89萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章