Linux高階程式設計之Linux程式位址布局

2021-07-07 05:06:12 字數 967 閱讀 8875

記憶體分類

引數段:argc,argv,env

特點:程式載入時分配,程式結束時釋放

資料段:全域性變數儲存區:全域性變數

特點:程式載入時分配,程式結束時釋放

靜態變數儲存區:全域性靜態變數,區域性靜態變數

特點:程式載入時分配,程式結束時釋放

bss段(又名:未初始化段)

特點:用來存放程式未被初始化的全域性變數和靜態變數的一塊記憶體區域。

**注意和資料段的區別:

bss段存放的是未初始化的全域性變數和靜態常量,資料段存放的是初始化的全域性變數和靜態變數。

堆疊段:堆區:動態分配的區域

特點:手工申請,手工釋放

eg:malloc free

new   delete 

***new和malloc的區別?

1)malloc是函式 記憶體大小由指定的引數決定 不能分配類的物件的記憶體

2)new是運算子 記憶體大小由變數型別決定 大多情況下分配類的物件的記憶體

棧區:區域性變數與區域性唯讀變數

特點;執行到定義時分配

形參變數

特點:函式被呼叫時分配

表示式臨時儲存區

特點:運算表示式時分配

**段:指令(函式)

特點:程式載入時分配,程式結束時釋放且「唯讀」

全域性常量(const)

常量儲存區:字串常量

特點:程式載入時分配,程式結束時釋放且「唯讀」

記憶體布局

2)堆向高記憶體位址生長

3)棧向低記憶體位址生長

linux程式設計之mprotect

mmap 的第三個引數指定對記憶體區域的保護,由標記讀 寫 執行許可權的 prot read prot write 和 prot exec 按位與操作獲得,或者是限制沒有訪問許可權的 prot none。如果程式嘗試在不允許這些許可權的本地記憶體上操作,它將被 sigsegv 訊號 segmenta...

Linux程式設計之fork

fork 建立乙個子程序 建立失敗返回負值 同時會有不同的錯誤碼 errno eagain 系統程序個數限制 enomem 申請記憶體失敗 enosys 系統平台不支援 建立成功將會返回兩個值 0 子程序的返回值,說明當前程式在子程序執行 0 父程序的返回值,說明當前程式在父程序執行,返回值為生成子...

Linux 高階Socket程式設計

基本套接字分為客戶機 伺服器和點對點模式。c s sever client 一般採用tcp b s browser server 一般採用udp 常用的資料結構有in addr 儲存ip位址 sockaddr in 表示internet協議位址結構 sockaddr 儲存主機ip位址和介面資訊 st...