黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動(dòng)力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 hot資訊 內(nèi)存堆棧分配

內(nèi)存堆棧分配

更新時(shí)間:2021-08-23 11:23:06 來源:動(dòng)力節(jié)點(diǎn) 瀏覽1100次

內(nèi)存管理概述:

如圖一所示,在計(jì)算機(jī)中,主要分為以上存儲區(qū)域中,分別是:硬盤、內(nèi)存、高級緩存 和寄存器。執(zhí)行程序后,他們的運(yùn)行速率自下而上(圖一)加快,與之相應(yīng)的造價(jià)越高,其中,硬盤的運(yùn)行效率最慢,寄存器的效率最快。在這幾個(gè)區(qū)域里,重點(diǎn)介紹一下內(nèi)存。在C++ 中,內(nèi)存主要分為五個(gè)區(qū),分別是:代碼區(qū)、棧區(qū)、堆區(qū)、靜態(tài)(全局)數(shù)據(jù)區(qū)。

1.代碼區(qū):

代碼區(qū)是用來儲存程序的所有代碼,以及字符串常量等在編譯期間就能確定的值,在程序的整個(gè)生命周期內(nèi), 在常量數(shù)據(jù)區(qū)的數(shù)據(jù)都是可用的。在這個(gè)區(qū)域內(nèi),所有的數(shù)據(jù)都是只讀的,不可以修改本區(qū)域的數(shù)據(jù),之所以這樣,是因?yàn)樵趯?shí)際的實(shí)現(xiàn)中,最底層內(nèi)部存儲格式的實(shí)現(xiàn)會使用特定的優(yōu)化方案。比如說,編譯器可能只把字符串常量存儲一次,而在幾個(gè)重疊的對象里面引用它 。

2.棧區(qū):

(1)定義:

棧區(qū)主要存放編譯器在需要的時(shí)候自動(dòng)分配,在不需要的時(shí)候自動(dòng)銷毀的變量。主要是局部變量和函數(shù)的參數(shù)等,在函數(shù)調(diào)用和傳參的時(shí)候,編譯器為局部變量或形參開辟空間,注意,在這塊空間中,編譯器并不會自動(dòng)對它進(jìn)行任何的初始化,它所保存的不是0,而是一個(gè)隨機(jī)值(可能是該儲存區(qū)上次被使用后的值),在函數(shù)結(jié)束后,所開辟的空間將自動(dòng)銷毀,里面所存的內(nèi)容將不復(fù)存在,也就是釋放存儲區(qū)的內(nèi)容。 這就是為什么老師們在講課中,最喜歡用的字眼:參數(shù)壓棧和彈出。

(2)易錯(cuò)點(diǎn):

在這里,不得不說明,當(dāng)一個(gè)自動(dòng)變量的地址被存儲在一個(gè)生命期長于它的指針時(shí),自動(dòng)變量被釋放后,該指針就成了一個(gè)“懸空指針”,這一點(diǎn)是非??膳碌?,因?yàn)?ldquo;懸空指針的內(nèi)容無法預(yù)測的”

3.全局靜態(tài)(數(shù)據(jù))區(qū):

全局(靜態(tài))數(shù)據(jù)區(qū):顧名思義,它是用來存儲全局靜態(tài)變量的存儲區(qū)域。只有在程序啟動(dòng)的時(shí)候才被分配,直到程序開始執(zhí)行時(shí)才被初始化,比如:函數(shù)的靜態(tài)變量就是在程序執(zhí)行到定義該變量的代碼時(shí)才被初始化的。在靜態(tài)區(qū)數(shù)據(jù)區(qū)中沒有被初始化的區(qū)域可以通過void* 指針來訪問或操縱,但是,static定義的靜態(tài)變量只能在本文件中使用,不可在其它文件中聲明使用。

4.堆區(qū):

(1)定義:

堆區(qū)是一個(gè)動(dòng)態(tài)的存儲區(qū)域,使用庫函數(shù)malloc()和free(),和操作符new和delete以及一些相關(guān)變量來進(jìn)行分配和回收,在堆區(qū)中,對象的生命周期可以比它村在內(nèi)存中的生命周期短,換句話說:程序可以獲得一片內(nèi)存區(qū)域而不用馬上對它進(jìn)行初始化,同時(shí),在對象被銷毀后,也不用馬上收回它所占用的內(nèi)存區(qū),在這段時(shí)間內(nèi),用戶可以還可以用void*型的指針訪問這片區(qū)域,但是原始對象的非靜態(tài)區(qū)以及成員函數(shù)都不能被訪問或者操縱,因?yàn)槲覀冎缹?shí)際上對象已經(jīng)不存在了。

動(dòng)態(tài)內(nèi)存分配到底是怎么分配的

1.好奇心不僅害死貓:

(1)數(shù)組元素的存儲方式:int array[8];

如圖所示,數(shù)組元素在內(nèi)存中是連續(xù)存放的,當(dāng)一個(gè)數(shù)組被聲明時(shí), 它所需要的內(nèi)存在編譯時(shí)就被分配。但是,在創(chuàng)建數(shù)組時(shí),須用一個(gè)常量來指定該數(shù)組的長度,而數(shù)組本身長度常常在運(yùn)行時(shí)才知道,它所占內(nèi)存空間的大小便取決于輸入數(shù)據(jù),在這種情況下,我們通常采取的解決辦法便是聲明一個(gè)比較大的數(shù)組,以確保它能夠容納足夠多的數(shù)據(jù)。

2.優(yōu)缺點(diǎn):

(1)優(yōu)點(diǎn):定義數(shù)組時(shí)簡單、數(shù)組大小一目了然。

(2)缺點(diǎn):有以下三點(diǎn)

1)此類聲明在程序中引入了人為的限制,如果程序需要使用的元素?cái)?shù)量超過了先前聲明的長度,則無法處理。

2)解決(1)中的問題,毫無疑問會想到把數(shù)組的聲明更大一些,但是,如果程序的元素?cái)?shù)量比較少時(shí),會造成大量的空間被浪費(fèi)掉(如圖三)

3)若元素個(gè)數(shù)遠(yuǎn)遠(yuǎn)大于數(shù)組容納范圍時(shí),程序因做出合理的響應(yīng),不應(yīng)該由此失敗

那么,這時(shí)候,人們好奇,有沒有一種可能,使得我要多大的的內(nèi)存就有多大? 我想存什么類型的數(shù)據(jù)就開辟相應(yīng)字節(jié)大小的空間呢?正是因?yàn)檫@些好奇心的出現(xiàn),才有了我們現(xiàn)在的動(dòng)態(tài)內(nèi)存分配。

以上就是動(dòng)力節(jié)點(diǎn)小編介紹的"內(nèi)存堆棧分配",希望對大家有幫助,想了解更多可查看Java堆棧。動(dòng)力節(jié)點(diǎn)在線學(xué)習(xí)教程,針對沒有任何Java基礎(chǔ)的讀者學(xué)習(xí),讓你從入門到精通,主要介紹了一些Java基礎(chǔ)的核心知識,讓同學(xué)們更好更方便的學(xué)習(xí)和了解Java編程,感興趣的同學(xué)可以關(guān)注一下。

提交申請后,顧問老師會電話與您溝通安排學(xué)習(xí)

免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 色男人的天堂久久综合 | 黄片毛片免费在线观看 | 免费污污视频在线观看 | 久久免费视频观看 | 一级日韩片 | 欧美白人黑人xxxx猛交 | 欧美激情一区二区三区免费观看 | 中文字幕视频网 | 色啊色| 香蕉视频在线观看黄 | 在线免费一级片 | 97国产免费全部免费观看 | www.精品在线 | 色综合色狠狠天天综合色hd | 黄色大片网 | 无码免费一区二区三区免费播放 | 亚洲欧洲日韩 | 日本黄色二级片 | 亚洲欧美另类在线视频 | 免费黄色地址 | 男人深夜网站 | 亚州黄色网址 | 欧美在线看片 | 国产区在线免费观看 | 国产小视频在线观看免费 | 亚洲国产va | 成人观看视频 | 国产日韩欧美精品一区二区三区 | 天堂在线视频精品 | 在线视频免费观看a毛片 | 国产一级视频在线观看 | 网站免黄 | 日韩黄色片视频 | 天天拍夜夜添久久精品免费 | 免费a级一片 | 久久只有精品视频 | 成人短视频视频在线观看网站 | 欧美一级特黄aaa大片 | 在线亚洲精品国产波多野结衣 | 一个人www免费观看视频 | 亚洲欧美日本国产 |