Unix編程 第七章 進(jìn)程環(huán)境

1.環(huán)境表:
一個(gè)字符指針數(shù)組,其中每一個(gè)指針包含一個(gè)以NULL結(jié)束的C字符串地址。
全局變量environ包含了該指針數(shù)組的地址


image.png

2.C程序的存儲(chǔ)空間布局
-1正文段:由CPU執(zhí)行的機(jī)器指令部分。可共享,只讀
-2初始化數(shù)據(jù)段:也叫數(shù)據(jù)段,包含了程序中年需明確地賦初值的變量比如:

int max = 99;

將此變量以其初值存放在初始化數(shù)據(jù)段中

-3.未初始化數(shù)據(jù)段:稱為bss(block started by symbol) 在程序開始之前,內(nèi)核將此段中的數(shù)據(jù)初始化為0或空指針。

long sum[10000];

-4.棧:自動(dòng)變量(局部變量)和函數(shù)調(diào)用時(shí)所需保存的信息
-5.堆:在堆中進(jìn)行動(dòng)態(tài)存儲(chǔ)的分配

image.png

需要存放在磁盤程序文件中的段只有正文段和初始化數(shù)據(jù)段

3.存儲(chǔ)空間分配

#include <stdlib.h>
void *malloc(size_t size);  //分配指定字節(jié)數(shù)的存儲(chǔ)區(qū)。初值不確定
void *calloc(stize_t nobj, size_t size); //為指定長度的對(duì)象分配存儲(chǔ)空間,每一位bit 都初始化為0。
void  *realloc(void *ptr, size_t newsize);//增加或減少以前分配區(qū)的長度。新增區(qū)域初值不確定
//在擴(kuò)充長度的時(shí)候,如果在存儲(chǔ)區(qū)后有足夠的空間,則直接向高位地址方向擴(kuò)充。否則會(huì)另外分配一個(gè)足夠大的存儲(chǔ)區(qū),將原本現(xiàn)存的數(shù)據(jù)拷貝過去,然后釋放原存儲(chǔ)區(qū),返回新的分配指針。
//成功都返回void*指針 否則返回NULL

大多數(shù)實(shí)現(xiàn)所分配的存儲(chǔ)空間要比所要求的稍微大一些,額外的空間用于記錄管理信息,比如:分配塊的長度,指向下一個(gè)分配塊的指針等。

函數(shù)alloca:他的調(diào)用魚malloc相同,但是它是在當(dāng)前函數(shù)的棧幀上分配存儲(chǔ)空間,不會(huì)發(fā)生泄露。但是缺點(diǎn)是增加了棧幀的長度。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容