像其他任何數據結構一樣,堆棧是遵循LIFO(後進先出)原則的數據結構。正如您的問題所述,它根據LIFO原理執行用於輸入和檢索數據的推送和彈出操作。
每個進程包括地址空間基本上4部分是 訪問的過程 當它正在運行
文本的 - 該部分包含實際M/C指令是 執行。在許多操作系統上,它被設置爲只讀,所以 進程不能修改其指令。這允許程序的多個實例共享文本的單個副本。
數據 - 該部分包含程序的數據部分。它furthere 分爲
1)初始化只讀數據 - 這包含的數據元素 由程序初始化,並且它們是在執行 過程期間只讀。
2)初始化讀寫數據 - 包含數據元素 ,這些數據元素由程序初始化,並將在 過程執行過程中進行修改。
3)未完成的數據 - 這包含的元素不是 由程序初始化並且在進程執行之前設置爲0。 這些也可以修改和引用爲BSS(塊啓動符號)。此類元素的 是,系統不必在該區域的 程序文件中分配空間,b'coz在 進程開始執行之前將其初始化爲0。
堆棧 - 該部分被用於局部變量,堆棧幀
堆 - 該部分包含所述動態分配的內存
int abc = 1; ----> Initialized Read-Write Data
char *str; ----> BSS
const int i = 10; -----> Initialized Read-Only Data
main()
{
int ii,a=1,b=2,c; -----> Local Variables on
Stack
char *ptr;
ptr = malloc(4); ------> Allocated Memory in Heap
c= a+b; ------> Text
}
數據,存儲數據 文本,商店代碼
有是由鏈接器生成的3(主要?)段/文件段。 文本 - 程序文本(顯然是const char數組,也許是其他'const'數組,因爲無論如何都不能改變它們)。我不是100%確定陣列部分,也許 有人會糾正我。數據 - 初始化全局數據。見下面的例子。 bss - 未初始化的全局數據。 下面是一些例子
int x = 1; /* goes into data */
int y; /* goes into bss */
const int z = 1;
這一點,我們已經看到了進入「文」,既然不能改變反正,但可以保護
const char array[] = {'a','b'....etc}
/* the rest goes into text */
int main(void)
{
return EXIT_SUCCESS;
}
塊發起者符號
(BSS)由Unix連接器產生的未初始化的數據段。其他段是包含程序代碼的「文本」段,「數據」段包含初始化數據。 bss段中的對象只有名稱和大小,但沒有值。
或'std :: stack'本身。 – GManNickG