C語言之佇列 堆疊 記憶體對映 多執行緒

2021-08-20 19:03:05 字數 2593 閱讀 9865

吧原**編譯成組合語言(機器語言):radsam工具;

佇列:先近先出;

棧:先近後出;棧的大小是由編譯器決定的,預設大小是1m,可以更改,但是一般不建議修改,每個exe都有乙個棧,無法利用較大記憶體,用完立刻**;棧是自動**記憶體;堆必須手動釋放;

棧區存放的是變數;

堆區:動態開闢記憶體;

上面的p在戰棧區,儲存了堆區的某乙個位址;

乙個程式本質上都是由 bss 段、data段、text段三個組成的;程式編譯後生成的目標檔案至少含有這三個段;.text即為**段,為唯讀。.bss段包含程式中

未初始化的

全域性變數和未初始化的static變數

。未初始化的符號在目標檔案的bss段中,而初始化的符號在data段中。

區域性變數存在於(堆疊)中,全域性變數存在於(靜態區)中,動態申請資料存在於(堆)中。

未初始化的全域性變數,static變數,編譯器會自動初始化為0. 這樣可以減少可執行檔案的大小。

區域性變數的值是不確定的。因為使用的時候會先賦值在使用。

bss段:

(bss segment)通常是指用來存放程式中

未初始化的全域性變數、未初始化的靜態變數

的一塊記憶體區域。bss是英文block started by symbol的簡稱。bss段屬於靜態記憶體分配。

text**段: 

**段(code segment/text segment)通常是指用來

存放程式執行**

的一塊記憶體區域。這部分區域的**屬於

唯讀。在**段中,

字串常量也屬於這部分。函式在**區;

***data資料段

:資料段(data segment)通常是指用來存放程式中

已初始化的全域性變數

的一塊記憶體區域

。資料段屬於靜態記憶體分配

;data段包含三個部分:

heap(堆)、stack(棧)和靜態資料區

堆(heap)

:堆是用於

存放程序執行中被

動態分配的記憶體段

,它的大小並不固定,可動態擴張或縮減

。棧(stack)

:棧又稱堆疊, 是使用者存放程式

臨時建立的區域性變數

,也就是說我們函式括弧「{}」中定義的變數(但不包括static宣告的變數,static意味著在資料段中存放變 量

,),在函式被呼叫時,棧用來傳遞引數和返回值

等。由於棧的先進先出特點,所以棧特別方便用來儲存/恢復呼叫現場。

函式的引數、非靜態區域性變數,返回的位址都在棧區;引數壓棧的順序是從右向左;

靜態資料區:存放的是程式中已初始化的

全域性變數、已初始化的靜態變數和常量;雖然在函式區域性定義常量, 但其儲存位置為靜態資料區而不是區域性棧區。

靜態資料區與程式共存亡,靜態區分配優先於main函式,棧區返回**,反覆釋放;

靜態全域性變數只有當前.c檔案能訪問,

text和data段都在可執行檔案中(在嵌入式系統裡一般是固化在映象檔案中),由系統從可執行檔案中載入;而bss段不在可執行檔案中,由系統初始化。

bss段只儲存沒有值的變數,所以事實上它並不需要儲存這些變數的映像。執行時所需要的bss段大小記錄在目標檔案中,但bss段並不佔據目標檔案的任何空間。

cpu是用於運算和控制的,只能賦中間臨時的值,不能儲存結果;記憶體是用來儲存結果的,只能對儲存結果的記憶體賦值;

register int a;定義乙個暫存器變數;暫存器是在cpu中的,運算速度比記憶體塊;

*****多執行緒

include程序,乙個程序中更可以有多個執行緒;

_beginthread( , , ); 開啟執行緒  ——endthread();結束執行緒

函式存放在**區,函式名存放函式的位址;

記憶體分布:

詳解C語言之堆疊

目錄 a.堆疊是一種特殊的線性表 b.堆疊的資料元素以及資料元素間的邏輯關係和線性表完全相同,其不同點是 線性表允許在任意位置插入和刪除資料元素,但堆疊只允許在固定一端進行插入和刪除資料元素,所以棧又稱為 先進後出 filo 或 後進先出 lifo 的線性表 c.堆疊中允許進行插入和刪除資料元素的一...

C語言之堆疊 回文數

問題描述 123321是乙個非常特殊的數,它從左邊讀和從右邊讀是一樣的。輸入乙個正整數n,程式設計求所有這樣的五位和六位十進位制數,滿足各位數字之和等於n 輸入格式 輸入一行,包含乙個正整數n。輸出格式 按從小到大的順序輸出滿足條件的整數,每個整數佔一行。樣例輸入 52樣例輸出 899998 989...

c語言之佇列結構

佇列是一種操作受限的線性表,其限制條件為允許在表的一端進行插入,而在表的另一端進行刪除。插入的一端叫做隊尾,刪除的一端叫做隊頭。向佇列中插入新元素的行為稱為進隊,從佇列中刪除元素的行為稱為出隊。佇列的特點是先進先出。舉例 火車從山洞一端開進,從山洞另一端開出,車廂好比乙個個元素,最先進入山洞的車廂先...