當前位置:首頁 > 芯聞號 > 充電吧
[導讀]堆和棧的區(qū)別一、預(yù)備知識—程序的內(nèi)存分配  一個由C/C++編譯的程序占用的內(nèi)存分為以下幾個部分?  1、棧區(qū)(stack)— 由編譯器自動分配釋放 ,存放函數(shù)的參數(shù)值,局部變量的值等。其操作方式類似

堆和棧的區(qū)別

一、預(yù)備知識—程序的內(nèi)存分配

  一個由C/C++編譯的程序占用的內(nèi)存分為以下幾個部分

?

  1、棧區(qū)(stack)— 由編譯器自動分配釋放 ,存放函數(shù)的參數(shù)值,局部變量的值等。其操作方式類似于數(shù)據(jù)結(jié)構(gòu)中的棧。

?

  2、堆區(qū)(heap)— 由程序員分配釋放, 若程序員不釋放,程序結(jié)束時可能由OS回收。注意它與數(shù)據(jù)結(jié)構(gòu)中的堆是兩回事,分配方式倒是類似于鏈表。

?

  3、全局區(qū)(靜態(tài)區(qū))(static)— 全局變量和靜態(tài)變量的存儲是放在一塊的,初始化的全局變量和靜態(tài)變量在一塊區(qū)域, 未初始化的全局變量和未初始化的靜態(tài)變量在相鄰的另一塊區(qū)域。程序結(jié)束后由系統(tǒng)釋放。

?

  4、文字常量區(qū) — 常量字符串就是放在這里的,程序結(jié)束后由系統(tǒng)釋放 。

?

  5、程序代碼區(qū)— 存放函數(shù)體的二進制代碼。

二、例子程序

  這是一個前輩寫的,非常詳細

?

  //main.cpp

?

  int a = 0; 全局初始化區(qū)

?

  char *p1; 全局未初始化區(qū)

?

  main()

?

  {

?

  int b; 棧

?

  char s[] = "abc"; 棧

?

  char *p2; 棧

?

  char *p3 = "123456"; 123456