第一篇:C語言內(nèi)存分配
C語言變量聲明及內(nèi)存分配
一個由c/C++編譯的程序占用的內(nèi)存分為以下幾個部分
1、棧區(qū)(stack)— 程序運行時由編譯器自動分配,存放函數(shù)的參數(shù)值,局部變量的值等。其操作方式類似于數(shù)據(jù)結(jié)構(gòu)中的棧。程序結(jié)束時由編譯器自動釋放。
2、堆區(qū)(heap)— 在內(nèi)存開辟另一塊存儲區(qū)域。一般由程序員分配釋放,若程序員不釋放,程序結(jié)束時可能由OS回收。注意它與數(shù)據(jù)結(jié)構(gòu)中的堆是兩回事,分配方式倒是類似于鏈表,呵呵。
3、全局區(qū)(靜態(tài)區(qū))(static)—編譯器編譯時即分配內(nèi)存。全局變量和靜態(tài)變量的存儲是放在一塊的,初始化的全局變量和靜態(tài)變量在一塊區(qū)域,未初始化的全局變量和未初始化的靜態(tài)變量在相鄰的另一塊區(qū)域(BSS)。-程序結(jié)束后由系統(tǒng)釋放
4、文字常量區(qū) —常量字符串就是放在這里的,程序結(jié)束后由系統(tǒng)釋放。
5、程序代碼區(qū) —存放函數(shù)體的二進制代碼。例子程序
這是一個前輩寫的,非常詳細(xì) #include
#include
int a = 0;
//全局初始化區(qū) char *p1;
//全局未初始化區(qū) void main(){
int b=1;// 棧
char s[] = “abc”;//棧
char *p2;//棧
char *p3 = “123456”;//“123456