1. 程式人生 > >Linux下c的進一步學習

Linux下c的進一步學習

1.資料儲存區定義及其特點
1.1堆區
由malloc動態分配記憶體,free釋放的儲存在堆區,由new分配,delete釋放的儲存在自由儲存區,自由儲存區一般來講不僅包括堆區,還可能包括全域性儲存區的未分配部分。
1.2棧區
就是那些由編譯器在需要的時候分配,在不需要的時候自動清除的變數的儲存區。裡面的變數通常是區域性變數、函式引數等。在一個程序中,位於使用者虛擬地址空間頂部的是使用者棧,編譯器用它來實現函式的呼叫。棧區大小固定,一般為1M,地址向下擴充套件。(百度參考)
1.3靜態資料區
全域性變數和靜態變數被分配到同一塊記憶體中,都在全域性資料區,在以前的 C 語言中,全域性變數又分為初始化的和未初始化的(初始化的全域性變數和靜態變數在一塊區域,未初始化的全域性變數與靜態變數在相鄰的另一塊區域,同時未被初始化的物件儲存區可以通過 void* 來訪問和操縱,程式結束後由系統自行釋放),在 C++ 裡面沒有這個區分了,他們共同佔用同一塊記憶體區。
1.4程式碼段
是指用來存放程式執行程式碼的一塊記憶體區域。這部分割槽域的大小在程式執行前就已經確定,並且記憶體區域通常屬於只讀, 某些架構也允許程式碼段為可寫,即允許修改程式。在程式碼段中,也有可能包含一些只讀的常數變數,例如字串常量等。程式碼段是存放了程式程式碼的資料,假如機器中有數個程序執行相同的一個程式,那麼它們就可以使用同一個程式碼段。(百度參考)
堆區是自己生成,自己釋放;棧區,全域性資料區,程式碼段是由系統生成,系統釋放。
2.資料的基本演算法
+,-,*,/(由此做了個簡易的計算器)
3.比較運算子
( )?( ):( )
?前面為真執行?後第一個( )表示式,反之執行第二個( )表示式內容
4.位運算
4.1 <<
a<<b 即是a左移b位(在二進位制表示下)
4.2 >>
a>>b 即是a右移b位(在二進位制表示下)
5.逗號表示式
a=(x=3,4+5,x+4)
表示式的值等於最後一個逗號後的表示式的值,即是a=x+4=3+4=7
6.資料的儲存型別
6.1 const
其值不想修改,只讀變數
6.2 register
直接將值儲存在暫存器中,並且值不能超過cpu的最大值
6.3 extern
宣告全域性變數
6.4 volatile
每個值從記憶體取。
例如:
volatile int i=10;
j=i;
j的值從記憶體中取。
6.5 auto
動態分配記憶體,資料儲存在動態儲存區,函式呼叫結束自動釋放這些儲存空間。
6.6 static
宣告靜態變數,相對應的型別儲存在靜態資料區,一般資料只初始化一次,具有記憶功能。