linux 環境變數(linux程序記憶體管理)

2021-08-08 20:32:59 字數 1283 閱讀 7432

資料的內部儲存

大端:低位址存高位數

小端:高位址存高位數

**段

乙個程式多數情況下是不需要更改自身**的,只有一種情況例外,就是一些長時間執行的公升級程式。(另一種解決方案為採用共享庫的形式)。

資料段

包含程式中明確給定初值的全域性變數和靜態變數。

緩衝段

通常是沒有明確給定初值的全域性變數和靜態變數。

所有的自動變數和函式呼叫時所需要儲存的資訊(返回位址,函式呼叫前個暫存器的值等)都儲存在棧上。

棧隨著函式的呼叫而生長,隨著函式呼叫結束而消亡。

自動變數的3種儲存方式:

儲存在資料段(給定初始值的全域性變數和靜態變數)或者bass段(沒給定初值的全域性變數和靜態變數,靜態區域性變數);

儲存在暫存器(暫存器變數)

儲存在棧中(一般變數,如區域性變數)

注意:c語言程式設計中,一種典型的錯誤就是將乙個指向區域性變數的指標作為函式的返回值返回。

堆用於儲存使用者申請的記憶體空間,通常在堆中進行動態記憶體分配。

作業系統為程式分配的是虛擬位址,而不是實體地址。

作業系統的記憶體分頁管理機制:首先我們知道,每個動態執行的程式就是程序,作業系統為每個程序維護了乙個頁表。頁表給出了該程序的每一頁對應的幀的位置。頁表記錄了這個程序的很多頁,很多頁構成了這個程序,將這個程序分成很多頁的作用就是能夠在物理記憶體上可以不連續儲存,但在邏輯上是連續連續儲存。對應的,乙個程序被分為很多頁,記憶體位址被分為很多幀。這樣,根據給出的邏輯位址(頁號和偏移量)通過處理器產生實體地址(幀號和偏移量)。

常量的儲存

如「c」,1234,這些簡單常量,是儲存在程式的**段中 。

但是對於「aasdfmaaf」這種太長的字串,會將其儲存在。rodata段中,但在該段的位址會轉換為乙個簡單變數儲存在程式的**段中。

總結:

棧是動態的,儲存的一般是一些自動變數,會呼叫函式,並且會消長。

堆是動態分配的記憶體,但分配到的記憶體位址為虛擬位址。

.data段儲存被初始化後的靜態變數和全域性變數。

.bass段通常儲存未被初始化的靜態變數和全域性變數。

**段儲存的是指令集和一些常量。

linux環境變數

初次學習lliux對環境變數的知識甚是不解決,特花費乙個上午的時間總結了一下,可以說是全面!如各位有更加詳細的見解不妨告知!定製環境變數 環境變數是和shell緊密相關的,使用者登入系統後就啟動了乙個shell。對於linux來說一般是bash,但也可以重新設定或切換到其它的 shell。環境變數是...

Linux環境變數

好吧,我承認這篇文章是轉的.1.顯示環境變數home echo home home redbooks 2.設定乙個新的環境變數hello export hello hello echo hello hello 3.使用env命令顯示所有的環境變數 env hostname redbooks.safe...

linux環境變數

一 變數分類 linux 的變數可分為兩類 環境變數和本地變數 環境變數,或者稱為全域性變數,存在與所有的shell 中,在你登陸系統的時候就已經有了相應的系統定義的環境變數了。linux 的環境變數具有繼承性,即子shell 會繼承父shell 的環境變數。1 定義環境變數 格式 export v...