欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C/C++中棧(stack)&堆(heap)詳解及其作用介紹

 更新時(shí)間:2021年09月02日 15:33:34   作者:我是小白呀  
這篇文章主要介紹了C/C++中棧(stack)&堆(heap)詳解及其作用,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

概述

棧 (stack) 是為執(zhí)行線程流出的內(nèi)存空間. 堆 (head) 是為動(dòng)態(tài)分配預(yù)留的空間.

在這里插入圖片描述

程序運(yùn)行中的棧和堆

我們以一段代碼來舉例:

#include <iostream>
using namespace std;

int a = 0;  // 全局初始化區(qū)
char *pt;  // 全局未初始化

int main() {
    int b; // b在棧區(qū)
    char s[] = "abc";  // s在棧區(qū)
    char *p1;  // 在棧區(qū)
    char *p2 = "123";  // "123"在常量區(qū), p3在棧區(qū)
    static int c = 0;  // 全局靜態(tài)初始化區(qū)
    char *p3 = new char(65);  // 在堆區(qū)
    char *p4 = new char[10];  // 在堆區(qū)

    return 0;
}

在這里插入圖片描述

  • 棧區(qū): 棧區(qū)是分配局部變量的空間, 處于相對(duì)較高的地址. 棧地址向下增長(zhǎng)
  • 堆區(qū): 用于分配程序媛申請(qǐng)的內(nèi)存空間, 是向上增長(zhǎng)的
  • 靜態(tài)數(shù)據(jù)區(qū): 分配靜態(tài)變量, 全局變量的空間
  • 只讀區(qū): 分配常量和程序代碼

堆和棧的差異

在這里插入圖片描述

申請(qǐng)方式和回收方式

棧: 棧上的空間是自動(dòng)分配回收的. 生存周期只在函數(shù)的運(yùn)行過程中, 運(yùn)行后就釋放.

堆: 程序媛根據(jù)需要自己申請(qǐng)的空間, 只要程序媛不釋放空間, 就一直可以訪問到. 一旦忘記釋放會(huì)造成內(nèi)存泄漏.

申請(qǐng)后系統(tǒng)的響應(yīng)

棧: 只要棧的剩余空間大于所申請(qǐng)空間, 系統(tǒng)將為程序提供內(nèi)存, 否則將報(bào)異常提示棧溢出. 響應(yīng)速度快.

堆: 系統(tǒng)收到程序的申請(qǐng)時(shí), 會(huì)遍歷空閑內(nèi)存地址的鏈表. 尋找第一個(gè)空間大于所申請(qǐng)空間的堆節(jié)點(diǎn). 響應(yīng)速度慢.

申請(qǐng)效率比較

棧: 由系統(tǒng)自動(dòng)分配, 速度較快, 程序媛無法控制.

堆: 由 new 分配, 一般速度較慢, 而且容易產(chǎn)生內(nèi)存碎片, 不過用起來最方便.

申請(qǐng)大小的限制

棧: 在 Windows 下, 棧的大小是 2MB. 如果申請(qǐng)的空間超過棧的剩余空間時(shí), 將提示overflow
(棧溢出).

堆: 堆的大小受限于計(jì)算機(jī)系統(tǒng)中有效的虛擬內(nèi)存. 堆獲得的空間比較靈活, 也比較大.

堆和棧中的存儲(chǔ)內(nèi)容

棧: 函數(shù)調(diào)用語句的下一條可執(zhí)行語句的地址, 函數(shù)的各個(gè)參數(shù), 函數(shù)中的局部變量.

堆: 具體內(nèi)容由程序媛, 我們安排.

注: 當(dāng)有指針數(shù)據(jù)成員時(shí), 必須用深復(fù)制, 使其使用堆區(qū)的空間.

到此這篇關(guān)于C/C++中棧(stack)&堆(heap)詳解及其作用介紹的文章就介紹到這了,更多相關(guān)C++棧(stack)&堆(heap)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++實(shí)現(xiàn)LeetCode(237.刪除鏈表的節(jié)點(diǎn))

    C++實(shí)現(xiàn)LeetCode(237.刪除鏈表的節(jié)點(diǎn))

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(237.刪除鏈表的節(jié)點(diǎn)),本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • C語言中find_package()的搜索路徑的實(shí)現(xiàn)

    C語言中find_package()的搜索路徑的實(shí)現(xiàn)

    本文主要介紹了C語言中find_package()的搜索路徑的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • 使用C++制作簡(jiǎn)單的web服務(wù)器

    使用C++制作簡(jiǎn)單的web服務(wù)器

    本文給大家分享的是使用C++簡(jiǎn)單實(shí)現(xiàn)web服務(wù)器的代碼,雖然非常的簡(jiǎn)陋,功能也很少,主要是為了更好的理解WEB服務(wù)器的工作原理,推薦給大家,也希望對(duì)大家能夠有所幫助。
    2015-03-03
  • C++ Boost Intrusive庫示例精講

    C++ Boost Intrusive庫示例精講

    Boost是為C++語言標(biāo)準(zhǔn)庫提供擴(kuò)展的一些C++程序庫的總稱。Boost庫是一個(gè)可移植、提供源代碼的C++庫,作為標(biāo)準(zhǔn)庫的后備,是C++標(biāo)準(zhǔn)化進(jìn)程的開發(fā)引擎之一,是為C++語言標(biāo)準(zhǔn)庫提供擴(kuò)展的一些C++程序庫的總稱
    2022-11-11
  • C++ 11新特性之大括號(hào)初始化詳解

    C++ 11新特性之大括號(hào)初始化詳解

    這篇文章主要介紹了C++ 11新特性之大括號(hào)初始化的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用C++具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-08-08
  • 帶頭結(jié)點(diǎn)單鏈表與不帶頭結(jié)點(diǎn)單鏈表的區(qū)別

    帶頭結(jié)點(diǎn)單鏈表與不帶頭結(jié)點(diǎn)單鏈表的區(qū)別

    這篇文章主要介紹了帶頭結(jié)點(diǎn)單鏈表與不帶頭結(jié)點(diǎn)單鏈表的區(qū)別,需要的朋友可以參考下
    2023-07-07
  • C++ OpenCV學(xué)習(xí)之圖像像素值統(tǒng)計(jì)

    C++ OpenCV學(xué)習(xí)之圖像像素值統(tǒng)計(jì)

    在圖像分析的時(shí)候,我們經(jīng)常需要對(duì)單通道圖像的像素進(jìn)行統(tǒng)計(jì)。本文將主要介紹利用C++ OpenCV實(shí)現(xiàn)的圖像像素值統(tǒng)計(jì)的幾種方法,需要的可以參考一下
    2022-01-01
  • C語言實(shí)現(xiàn)SM4加解密方式

    C語言實(shí)現(xiàn)SM4加解密方式

    這篇文章主要介紹了C語言實(shí)現(xiàn)SM4加解密方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • c++詳細(xì)講解構(gòu)造函數(shù)的拷貝流程

    c++詳細(xì)講解構(gòu)造函數(shù)的拷貝流程

    拷貝構(gòu)造函數(shù)是一種特殊的構(gòu)造函數(shù),它在創(chuàng)建對(duì)象時(shí),是使用同一類中之前創(chuàng)建的對(duì)象來初始化新創(chuàng)建的對(duì)象。拷貝構(gòu)造函數(shù)通常用于:通過使用另一個(gè)同類型的對(duì)象來初始化新創(chuàng)建的對(duì)象。?復(fù)制對(duì)象把它作為參數(shù)傳遞給函數(shù)。復(fù)制對(duì)象,并從函數(shù)返回這個(gè)對(duì)象
    2022-05-05
  • C語言各種符號(hào)的使用介紹上篇

    C語言各種符號(hào)的使用介紹上篇

    C 語言的基本符號(hào)就有 20 多個(gè),每個(gè)符號(hào)可能同時(shí)具有多重含義,而且這些符號(hào)之間相互組合又使得 C 語言中的符號(hào)變得更加復(fù)雜起來
    2022-08-08

最新評(píng)論