chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

C++中的棧和堆區(qū)別

SwM2_ChinaAET ? 來源:未知 ? 作者:李倩 ? 2018-10-04 10:29 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一般來說,寫程序就是與數(shù)據(jù)打交道,在執(zhí)行程序某一功能的時候,將該功能所需要的數(shù)據(jù)加載到內(nèi)存中,然后在執(zhí)行完畢的時候釋放掉該內(nèi)存。

數(shù)據(jù)在內(nèi)存中的存放方式有以下幾種:

(1)棧區(qū)——由編譯器自動分配并且釋放,該區(qū)域一般存放函數(shù)的參數(shù)值、局部變量的值等。

(2)堆區(qū)——由程序員分配釋放。

(3)寄存器區(qū)——用來保存棧頂指針和指令指針。

(4)全局區(qū)(靜態(tài)區(qū))——全局變量和靜態(tài)變量的存儲是放在一塊的。

(5)文字常量區(qū)——放常量字符串的區(qū)域。

(6)程序代碼區(qū)——存放函數(shù)體的二進(jìn)制代碼。

棧和堆的區(qū)別:

(1)內(nèi)存申請方式上的不同

<1>棧:由系統(tǒng)自動分配。

<2>堆:由程序員自己申請,需要指明變量的大小。

(2)系統(tǒng)響應(yīng)的不同

<1>棧:只要棧的剩余空間大于所申請空間,系統(tǒng)就為程序提供 內(nèi)存,否則提示棧溢出。

<2>堆:系統(tǒng)收到程序申請空間的要求后,會遍歷一個操作系統(tǒng),用于記錄內(nèi)存空閑地址的鏈表,當(dāng)找到一個空間大于所申請空間的堆結(jié)點(diǎn)后,就會就會將該結(jié)點(diǎn)從記錄內(nèi)存空閑地址的鏈表中刪除。并將該結(jié)點(diǎn)的內(nèi)存分配給程序,然后在這塊內(nèi)存區(qū)域的首地址處記錄分配的大小,這樣在使用delete來釋放內(nèi)存的時候,delete才能正確的識別并刪除該內(nèi)存區(qū)域的所有變量。另外,申請的內(nèi)存空間與堆結(jié)點(diǎn)上的內(nèi)存空間不一定相等,這時系統(tǒng)就會自動將堆結(jié)點(diǎn)上多出來的那一部分內(nèi)存空間回收到空閑鏈表中。

(3)空間大小的不同

<1>棧:在Windows下,棧是一塊連續(xù)的內(nèi)存的區(qū)域,其大小數(shù)值是編譯時就確定的常數(shù),是由系統(tǒng)預(yù)先根據(jù)棧頂?shù)牡刂泛蜅5淖畲笕萘慷x好的。如果你的數(shù)據(jù)申請的內(nèi)存空間超過棧的空間,那么系統(tǒng)會提示棧溢出。因此,別指望棧能存儲比較大的數(shù)據(jù)。

<2>堆:堆是不連續(xù)的內(nèi)存區(qū)域。各塊區(qū)域由鏈表將它們串聯(lián)起來。堆的上限是由系統(tǒng)中有效的虛擬內(nèi)存來定的。因此獲得的空間比較大,而且獲得空間的方式也比較靈活。

(4)執(zhí)行效率的不同

<1>棧:棧由系統(tǒng)自動分配,因此速度較快。

<2>堆:堆是由程序員分配的內(nèi)存,速度一般比較慢,而且容易產(chǎn)生內(nèi)存碎片。

(5)執(zhí)行函數(shù)時的不同

<1>棧:在函數(shù)調(diào)用時,第一個進(jìn)棧的是被調(diào)用函數(shù)下一行的內(nèi)存地址;其次是函數(shù)的參數(shù),假如參數(shù)多于一個,那么次序是從右往左;最后才是函數(shù)的局部變量。由于棧的先進(jìn)后出原則,因此它永遠(yuǎn)不可能產(chǎn)生內(nèi)存碎片。

<2>堆:堆是一大堆不連續(xù)的內(nèi)存區(qū)域,在系統(tǒng)中由鏈表串接起來。堆的運(yùn)行效率比棧要低得多,而且也容易產(chǎn)生碎片。優(yōu)點(diǎn)是堆可以存儲相當(dāng)多的數(shù)據(jù),并且一些細(xì)節(jié)可以由程序員安排。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 二進(jìn)制
    +關(guān)注

    關(guān)注

    2

    文章

    807

    瀏覽量

    42335
  • C++
    C++
    +關(guān)注

    關(guān)注

    22

    文章

    2119

    瀏覽量

    75330
  • 編譯器
    +關(guān)注

    關(guān)注

    1

    文章

    1662

    瀏覽量

    50232

原文標(biāo)題:【博文連載】C++中的“棧與堆”

文章出處:【微信號:ChinaAET,微信公眾號:電子技術(shù)應(yīng)用ChinaAET】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    區(qū)別在哪

    以下引用網(wǎng)上資料 理解區(qū)別(1)區(qū)(stack):由編譯器自動分配和釋放,存放函數(shù)的參數(shù)值、局部變量的值等,其操作方式類似于數(shù)據(jù)結(jié)構(gòu)
    發(fā)表于 08-11 09:18

    C語言單片機(jī)、、堆棧的區(qū)別是什么?

    C語言單片機(jī)、堆棧的區(qū)別是什么?
    發(fā)表于 10-13 08:09

    單片機(jī)有什么區(qū)別

    M0一、空間的區(qū)別:(1)區(qū)(st
    發(fā)表于 11-22 06:23

    STM32區(qū)別是什么

    區(qū)別是什么?的空間是如何進(jìn)行分配的?
    發(fā)表于 11-29 07:05

    區(qū)別是什么

    在回答完進(jìn)程的虛擬地址空間布局之后(上一篇),面試官可能抓住深入展開。區(qū)別①管理方式:
    發(fā)表于 12-22 07:26

    STM32堆棧區(qū)劃分

    STM32堆棧區(qū)(一)一個由C/C++編譯的程序占用的內(nèi)存分為以下幾個部分:區(qū)(stack):編譯器自動分配釋放,存放函數(shù)的參數(shù)值,局部變量的值等。操作方式類似于數(shù)據(jù)結(jié)構(gòu)
    發(fā)表于 01-20 08:32

    單片機(jī)區(qū)別在哪

    的好處是快捷,但是自由度小使用就象是自己動手做喜歡吃的菜肴,比較麻煩但是比較符合自己的口味,而且自由度大一、c/C++內(nèi)存分區(qū):(1)區(qū)(stack):由編譯器自動分配和釋放存放函
    發(fā)表于 01-20 08:31

    明確區(qū)分,究竟有什么區(qū)別?

    這條短短的一句話就包含了,看到new,我們首先就應(yīng)該想到,我們分配了一塊內(nèi)存,那么指針p呢?他分配的是一塊內(nèi)存,所以這句話的意思就是:在
    的頭像 發(fā)表于 04-09 09:45 ?4743次閱讀
    明確區(qū)分<b class='flag-5'>堆</b>與<b class='flag-5'>棧</b>,<b class='flag-5'>堆</b>和<b class='flag-5'>棧</b>究竟有什么<b class='flag-5'>區(qū)別</b>?

    一文看懂區(qū)別和聯(lián)系

    本文開始介紹了的要點(diǎn)以及對的對比進(jìn)行了分析,其次闡述了的聯(lián)系,最后介紹了
    的頭像 發(fā)表于 04-11 09:50 ?4.5w次閱讀
    一文看懂<b class='flag-5'>堆</b>和<b class='flag-5'>棧</b>的<b class='flag-5'>區(qū)別</b>和聯(lián)系

    C語言編程的“”和“”七大不同之處

    區(qū)別一直都是永恒的話題,為此我也查了很多的資料,以防自己的理解錯誤,而給他人造成理解偏差。 先從簡單的一個例子引出: void function(){ int *p = (
    發(fā)表于 01-04 14:14 ?955次閱讀
    <b class='flag-5'>C</b>語言編程<b class='flag-5'>中</b>的“<b class='flag-5'>堆</b>”和“<b class='flag-5'>棧</b>”七大不同之處

    C語言內(nèi)存的筆記資料說明

    本文檔的主要內(nèi)容詳細(xì)介紹的是C語言內(nèi)存的筆記資料說明說明了C語言中
    發(fā)表于 02-14 08:00 ?3次下載
    <b class='flag-5'>C</b>語言內(nèi)存<b class='flag-5'>堆</b>與<b class='flag-5'>棧</b>的筆記資料說明

    單片機(jī)區(qū)別

    M0一、空間的區(qū)別:(1)區(qū)(st
    發(fā)表于 11-13 14:51 ?9次下載
    單片機(jī)<b class='flag-5'>中</b><b class='flag-5'>堆</b>和<b class='flag-5'>棧</b>的<b class='flag-5'>區(qū)別</b>

    C++struct和class的區(qū)別?

    C++struct和class的區(qū)別是什么?C++struct和class的最大區(qū)別在于:
    的頭像 發(fā)表于 03-10 17:41 ?994次閱讀

    嵌入式C語言中區(qū)別

    在嵌入式C語言中,都是用來存儲變量的內(nèi)存區(qū)域,但它們在存儲和使用變量方面有很大的區(qū)別。
    的頭像 發(fā)表于 04-14 11:45 ?1887次閱讀

    區(qū)別和使用注意事項(xiàng)

    是在計(jì)算機(jī)科學(xué)中廣泛使用的兩種數(shù)據(jù)結(jié)構(gòu),它們具有不同的用途和特點(diǎn)。區(qū)別涉及到內(nèi)存分配、訪問方式、數(shù)據(jù)存儲等方面。在使用
    的頭像 發(fā)表于 01-18 17:24 ?2917次閱讀