在具體的C/C++編程框架中总寻,這兩個(gè)概念并不是并行的。棧是機(jī)器系統(tǒng)提供的數(shù)據(jù)結(jié)構(gòu),而堆則是C/C++函數(shù)庫(kù)提供的
堆: 先進(jìn)先出
堆是動(dòng)態(tài)分配和回收內(nèi)存的,沒(méi)有靜態(tài)分配的堆
釋放工作由程序員手動(dòng)管理吁朦,不及時(shí)回收容易產(chǎn)生內(nèi)存泄露
棧:先進(jìn)后出
由系統(tǒng)編譯器自動(dòng)管理,不需要程序員手動(dòng)管理
棧有兩種分配方式:靜態(tài)分配和動(dòng)態(tài)分配
靜態(tài)分配是系統(tǒng)編譯器完成的渡贾,比如局部變量的分配
動(dòng)態(tài)分配是有alloc函數(shù)進(jìn)行分配的逗宜,但是棧的動(dòng)態(tài)分配和堆是不同的,它的動(dòng)態(tài)分配也由系統(tǒng)編譯器進(jìn)行釋放空骚,不需要程序員手動(dòng)管理
Objective-C的對(duì)象在內(nèi)存中是以堆的方式分配空間的,并且堆內(nèi)存是由你釋放的纺讲,就是release
OC對(duì)象存放于堆里面(堆內(nèi)存要程序員手動(dòng)回收)
非OC對(duì)象一般放在棧里面(棧內(nèi)存會(huì)被系統(tǒng)自動(dòng)回收)