堆和棧的區(qū)別

簡(jiǎn)單的可以理解為:

heap:是由malloc之類(lèi)函數(shù)分配的空間所在地。地址是由低向高增長(zhǎng)的。

stack:是自動(dòng)分配變量,以及函數(shù)調(diào)用的時(shí)候所使用的一些空間。地址是由高向低減少的。

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

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

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

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

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

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

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

二、例子程序

這是一個(gè)前輩寫(xiě)的,非常詳細(xì)

//main.cpp

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

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

main()

{

int b; 棧

char s[] = "abc"; 棧

char *p2; 棧

char *p3 = "123456"; 123456在常量區(qū),p3在棧上。

static int c =0; 全局(靜態(tài))初始化區(qū)

p1 = (char *)malloc(10);

p2 = (char *)malloc(20);

分配得來(lái)得10和20字節(jié)的區(qū)域就在堆區(qū)。

strcpy(p1, "123456"); 123456放在常量區(qū),編譯器可能會(huì)將它與p3所指向的"123456"優(yōu)化成一個(gè)地方。

}

http://www.cnblogs.com/pomp/archive/2007/10/19/930145.html

最后編輯于
?著作權(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),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 在和計(jì)算機(jī)內(nèi)存打交道時(shí),我們一定會(huì)碰到堆和棧,這兩個(gè)東西很容易搞混,那么現(xiàn)在就來(lái)梳理一下二者的關(guān)系。 棧(Stac...
    Albert陳凱閱讀 2,427評(píng)論 0 6
  • 一、預(yù)備知識(shí)—程序的內(nèi)存分配 一個(gè)由C/C++編譯的程序占用的內(nèi)存分為以下幾個(gè)部分 1、棧區(qū)(stack)— 由編...
    悟道皆空閱讀 291評(píng)論 0 0
  • 一、預(yù)備知識(shí)—程序的內(nèi)存分配 一個(gè)由C/C++編譯的程序占用的內(nèi)存分為以下幾個(gè)部分 1、棧區(qū)(stack)— ...
    LuckTime閱讀 543評(píng)論 0 0
  • 一、預(yù)備知識(shí)―程序的內(nèi)存分配 一個(gè)由c/C++編譯的程序占用的內(nèi)存分為以下幾個(gè)部分 1、棧區(qū)(stack)― 由編...
    天氣很好丶閱讀 304評(píng)論 0 1
  • 看見(jiàn)這篇文章感覺(jué) 總結(jié)的 很到位,很精煉很到位 轉(zhuǎn)自 http://blog.csdn.net/hairetz/...
    json_jie閱讀 468評(píng)論 0 1

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