原文轉(zhuǎn)自http://blog.csdn.net/mishifangxiangdefeng/article/details/7200730
1.數(shù)據(jù)在內(nèi)存中的存放形式
1)棧區(qū):由編譯器自動分配和釋放
一般存放函數(shù)的參數(shù)值、局部變量的值等
2)堆區(qū):由程序員分配及釋放猪瞬。若程序員不釋放鲁森,程序結(jié)束后可能由OS回收
3)寄存器區(qū):用來保存棧頂指針和指令指針
4)全局區(qū)(靜態(tài)區(qū)):全局變量和靜態(tài)變量是存儲在一起的止潮。初始化的和未初始化的是分開的启泣。
程序結(jié)束后由系統(tǒng)釋放
5)文字常量區(qū):程序結(jié)束后由系統(tǒng)釋放
存放常量字符串
6)程序代碼區(qū):存放函數(shù)體的二進制代碼
2.堆與棧的區(qū)別:
補充:
(1)指針對內(nèi)存數(shù)據(jù)有保護作用
椔α穑可以為它其中的某個內(nèi)存單元命名头镊,但堆中的每個內(nèi)存單元都是匿名(這是對數(shù)據(jù)的保護)的磷雇。必須先在堆中申請一個內(nèi)存單元地址毛好,然后把它的保存在一個指針中望艺,只有該指針才可以訪問該內(nèi)存單元的數(shù)據(jù)。
(2)delete運算符只能刪除堆中的空間肌访,刪除棧中的空間會導(dǎo)致出錯
3.windows中棧是從高地址到低地址分配內(nèi)存的找默,堆是從低地址到高地址分配內(nèi)存的
http://zhidao.baidu.com/link?url=seX23frXhg_Nw0NwLWGyKQo_j3QSU5LxWh1ZLWMPeQVJHnTz8yXY_lO5amtvPG_7EPvush980dH8uxzejlYWc_
http://baike.baidu.com/link?url=lQejSt0bXopBPPPH0fE0ecIYsoIiGjf-FwBh6B6eSe5eMitJbGylZkjYLX9xaMUDrNm2k8DR4JVQ92wzMZD1Gq