新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 堆棧以及堆和棧的區(qū)別

        堆棧以及堆和棧的區(qū)別

        作者: 時間:2011-09-20 來源:網(wǎng)絡(luò) 收藏

          是一個"后進先出"的主存區(qū)域,位于段中,使用SS段寄存器記錄其段地址。它只有一個出入口,即當前棧頂,棧頂是地址較小 的一端(低端),它用堆棧指針寄存器SP指定。堆棧有兩種以字為單位的基本操作,對應(yīng)兩條基本指令:進棧指令PUSH和出棧指令POP。

          的區(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

        主站蜘蛛池模板: 汕头市| 普兰店市| 金秀| 平谷区| 鄂温| 武鸣县| 鸡东县| 泰安市| 昂仁县| 盐源县| 甘肃省| 玉门市| 乐至县| 平南县| 婺源县| 德惠市| 宜兰市| 都匀市| 安多县| 临夏县| 自贡市| 信阳市| 集贤县| 黄大仙区| 红原县| 北安市| 治县。| 东乌珠穆沁旗| 泌阳县| 冀州市| 荥经县| 嘉义市| 密山市| 德州市| 贵阳市| 贵定县| 芒康县| 盈江县| 孝义市| 科技| 新余市|