內(nèi)存是什么?或者先說(shuō)內(nèi)存有什么作用?
- 用于暫時(shí)存放CPU中的運(yùn)算數(shù)據(jù)
- 以及存放與硬盤(pán)等外部存儲(chǔ)器交換的數(shù)據(jù)
先清楚的是:CPU是用來(lái)處理、控制信息的丑瞧,內(nèi)存是用來(lái)存儲(chǔ)信息的。
也就可以理解CPU在處理數(shù)據(jù)時(shí)蜀肘,我們需要一個(gè)空間放這些數(shù)據(jù)绊汹,此時(shí)就是它啦。而內(nèi)存里面具體也是有所劃分的:
由低地址向高地址依依說(shuō)明:
- 代碼區(qū): 指用來(lái)存放程序執(zhí)行代碼的一塊內(nèi)存區(qū)域扮宠。
- 數(shù)據(jù)區(qū):指用來(lái)存放程序中已經(jīng)初始化的全局變量和靜態(tài)變量的一塊內(nèi)存區(qū)域西乖。
- **BSS區(qū): **指用來(lái)存放程序中未初始化的全局變量和靜態(tài)變量 的一塊內(nèi)存區(qū)域。
- **堆區(qū): **指用于存放進(jìn)程運(yùn)行中被動(dòng)態(tài)分配的內(nèi)存段坛增,是需要由程序員主動(dòng)控制的获雕,誰(shuí)創(chuàng)建,誰(shuí)釋放收捣。
- 棧區(qū): 指用戶存放程序臨時(shí)創(chuàng)建的局部變量的地方届案,此處是自動(dòng)分配的,編譯器需要的時(shí)候分配罢艾,不需要的時(shí)候自動(dòng)釋放和清除變量的內(nèi)存區(qū)域楣颠。
重點(diǎn)來(lái)說(shuō): 棧、堆咐蚯,可以從其區(qū)別來(lái)進(jìn)一步理解
首先我們要區(qū)別一下童漩,堆棧是分為數(shù)據(jù)結(jié)構(gòu)中的堆和棧和內(nèi)存分配中的堆和棧,先簡(jiǎn)單對(duì)比下春锋,數(shù)據(jù)結(jié)構(gòu)中的堆和棧:
- 堆: 它是指經(jīng)過(guò)排序的樹(shù)形數(shù)據(jù)結(jié)構(gòu)矫膨,每個(gè)結(jié)點(diǎn)都有一個(gè)值。通常我們所說(shuō)的堆的數(shù)據(jù)結(jié)構(gòu),是指二叉堆豆拨。堆的特點(diǎn)是根結(jié)點(diǎn)的值最兄狈堋(或最大),且根結(jié)點(diǎn)的兩個(gè)子樹(shù)也是一個(gè)堆施禾。
- 棧: 它是一種具有后進(jìn)先出性質(zhì)的數(shù)據(jù)結(jié)構(gòu),也就是說(shuō)后存放的先取搁胆,先存放的后取弥搞。
但實(shí)際上,我們此處要說(shuō)的是內(nèi)存分配中的堆和棧:
1渠旁、申請(qǐng)方式和回收方式不同
棧:系統(tǒng)自動(dòng)分配空間的攀例,同時(shí)也是自動(dòng)回收的。
堆:是我們自己根據(jù)需要自己申請(qǐng)的空間顾腊,回收當(dāng)然是要看我們程序員什么時(shí)候釋放粤铭,不釋放就一直存在的。2杂靶、效率的不同
棧:由系統(tǒng)自動(dòng)分配梆惯,速度較快。但程序員是無(wú)法控制的吗垮。
堆:是由我們自己分配的內(nèi)存垛吗,一般速度比較慢,而且容易產(chǎn)生內(nèi)存碎片不過(guò)用起來(lái)最方便烁登。3怯屉、大小的不同
棧:它是向低地址擴(kuò)展的數(shù)據(jù)結(jié)構(gòu),是一塊連續(xù)的內(nèi)存的區(qū)域饵沧。它的最大容量是系統(tǒng)預(yù)先規(guī)定好的锨络,所以棧獲得的空間較小。
堆:堆是向高地址擴(kuò)展的數(shù)據(jù)結(jié)構(gòu)狼牺,是不連續(xù)的內(nèi)存區(qū)域羡儿。它的大小是受限于計(jì)算機(jī)系統(tǒng)中有效的虛擬內(nèi)存,所以堆獲得的空間相對(duì)比較靈活锁右,也比較大失受。
另外就是像上面大致涉及到低地址和高地址,那所謂地址的偏移又是什么情況呢咏瑟?
偏移地址:偏移地址就是計(jì)算機(jī)里的內(nèi)存分段后拂到,在段內(nèi)某一地址相對(duì)于段首地址(段地址)的偏移量。以上是百度百科的解釋码泞。
另外了解下:存儲(chǔ)器中每一個(gè)單元的地址可以用兩種方法表示:
1兄旬、邏輯地址:其表達(dá)形式為“段地址:段內(nèi)偏移地址”。
邏輯地址是內(nèi)部和編程使用的、并不唯一领铐。2悯森、物理地址:CPU與存儲(chǔ)器進(jìn)行數(shù)據(jù)交換時(shí)在地址總線上提供的20位地址信息稱為物理地址。
物理地址是外部連接使用的绪撵、唯一的瓢姻,它是“與地址總線相對(duì)應(yīng)”。
在內(nèi)存中的實(shí)際地址就是所謂的“物理地址”音诈,而邏輯地址就是邏輯段管理內(nèi)存而形成的幻碱。
對(duì)內(nèi)存偏移之后有了大致印象后,就是下一個(gè)點(diǎn):對(duì)指針偏移這塊的問(wèn)題進(jìn)行了解啦...
PS常識(shí):了解下 ROM 與 RAM 的區(qū)別细溅。RAM是指手機(jī)內(nèi)存褥傍,屬于手機(jī)內(nèi)部存儲(chǔ)器,屬于隨機(jī)存儲(chǔ)喇聊,速度高于ROM恍风,對(duì)于手機(jī)配置性能起著重要的決定性。ROM則屬于外部存儲(chǔ)誓篱,可以簡(jiǎn)單的理解為手機(jī)硬盤(pán)朋贬。
備注參考:
http://www.reibang.com/p/ea34be4ba625
http://www.cleey.com/blog/single/id/776.html
http://www.cnblogs.com/clover-toeic/p/3755401.html