C語言的堆與棧

程序運行中有兩個存儲空間可用,一個是棧,是歸屬於進程本身的,另外一個是堆,所有進程共用的。局部變量存放在棧中,而全局變量則放在堆中。
局部變量,如果是基本數據類型,那麼就直接存在棧中,如果是應用數據類型,比如String str = new String("12");,會把對象存在堆中,對象的引用(指針)存在棧中。
成員變量,類的成員在不同對象中各不相同,基本數據類型和引用數據類型都存儲在這個對象中,作爲一個整體存儲在堆中。
void ConfigINI::setStringValueWithIndex(const char *index, const char* name, const char* value)
{
    ConfigINIEntry entry;
    entry.index = index;
    entry.name = name;
    entry.value = value;
    if(datas.size() == 0) {
        datas.push_back(entry);    //entry存在於堆中,所以可以直接推進列表中。
        return;
    }
}
棧分配的軟件優勢:棧分配算法簡單,所以高效;堆分配算法相對比較複雜。棧分配的硬件優勢:cache和內存映射。如果在棧上分配小塊內存,因爲cache和內存映射已經建立,則效率會非常高,遠遠優於堆分配。
堆在分配和釋放時都要調用函數(MALLOC,FREE),比如分配時會到堆空間去尋找足夠大小的空間(因爲多次分配釋放後會造成碎片)。
能夠存在於棧中的變量,就不要放到堆中。
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章