BSS段:在採用段式記憶體管理的架構中,BSS段(bss segment)通常是指用來存放程式中未初始化的全域變數的一塊記憶體地區。BSS是英文Block Started by Symbol的簡稱。BSS段屬於靜態記憶體配置。
資料區段:在採用段式記憶體管理的架構中,資料區段(data segment)通常是指用來存放程式中已初始化的全域變數的一塊記憶體地區。資料區段屬於靜態記憶體配置。
程式碼片段:在採用段式記憶體管理的架構中,程式碼片段(code segment / text
segment)通常是指用來存放程式執行代碼的一塊記憶體地區。這部分地區的大小在程式運行前就已經確定,並且記憶體地區通常屬於唯讀,
某些架構也允許程式碼片段為可寫,即允許自修改程式。 在程式碼片段中,也有可能包含一些唯讀常數變數,例如字串常量等。
堆棧又稱堆棧(stack)在電腦科學中,是一種特殊的鏈表形式的資料結構,它的特殊之處在於只能允許在鏈表的一端(稱為棧頂,英文為top)進行添加和刪除操作。另外堆棧資料結構的實現也可以通過數組來完成。
嚴格來說堆是指Heap,程式運行時供程式員來支配的一段記憶體。
而棧Stack,多指函數調用時候參數的相互傳遞存在的記憶體地區。
由於堆棧資料結構只允許在一端進行操作,因而按照先進後出(LIFO-Last In First Out)的原理工作。
堆棧資料結構支援兩種基本操作:壓棧(push)和彈棧(pop):
1. 壓棧(入棧):將對象或者資料壓入棧中,更新棧頂指標,使其指向最後入棧的對象或資料。
2. 彈棧(出棧):返回棧頂指向的對象或資料,並從棧中刪除該對象或資料,更新棧頂。
C++中引用和指標的區別
指標初始化的時候,可以指向一個地址,也可以為空白。《----》引用必須初始化為另一個變數.
C/C++中的指標其實就是一個變數,和其他類型的變數是一個樣子的,它是一個佔用四位元組的變數(32位機上),它與其他變數的不同之處就在於它的
變數值是一個記憶體位址,指向記憶體的另外一個地方。reference我的理解就是一個別名,它和linux作業系統上的alias是一個樣子的。再者,一
個pointer變數可以指向NULL,表示它不指向任何變數地址,但是reference必須在聲明的時候就得和一個已經存在的變數相綁定,而且這種綁
定不可改變。
如果是傳遞指標,那麼先複製該指標,在函數內部使用的是複製後的指標,這個指標與原來的指標指向相同的地址,如果在函數內部將複製後的指標指向了另外的新的對象,那麼不會影響原有的指標;
但
是對於傳遞指標引用,如果將傳遞進來的指標指向了新的對象,那麼原始的指標也就指向了新的對象,這樣就會造成記憶體流失,因為原來指標指向的地方已經不能再
引用了,即使沒有將傳遞進來的指標指向新的對象,而是在函數結束的時候釋放了指標,那麼在函數外部就不能再使用原有的指標了,因為原來的記憶體已經被釋放
了。
引用和指標
★ 相同點:
1. 都是地址的概念;
指標指向一塊記憶體,它的內容是所指記憶體的地址;引用是某塊記憶體的別名。
★ 區別:
1. 指標是一個實體,而引用僅是個別名;
2. 引用使用時無需解引用(*),指標需要解引用;
3. 引用只能在定義時被初始化一次,之後不可變;指標可變;
引用“從一而終” ^_^
4. 引用沒有 const,指標有 const,const 的指標不可變;
5. 引用不可為空,指標可以為空白;
6. “sizeof 引用”得到的是所指向的變數(對象)的大小,而“sizeof 指標”得到的是指標本身(所指向的變數或對象的地址)的大小;
typeid(T) == typeid(T&) 恒為真,sizeof(T) == sizeof(T&) 恒為真,
但是當引用作為成員時,其佔用空間與指標相同(沒找到標準的規定)。
7. 指標和引用的自增(++)運算意義不一樣;
★ 聯絡
1. 引用在語言內部用指標實現(如何??)。
2. 對一般應用而言,把引用理解為指標,不會犯嚴重語義錯誤。引用是操作受限了的指標(僅容許取內容操作)。