版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、、大家討論一下CC、C#、java、在編譯時,分別是怎樣分配內(nèi)存的。我知道:.CC把局部變量放在堆棧中,全局、靜態(tài)變量放在堆中,.C#把值類型都放在堆棧中,引用類型放在堆中。.java我不清楚。大家深入討論一下.論者有分。2、另外,想學習上面那些知識,要那本書籍啊?。ㄒ?jīng)典的、越深入越好)。謝謝!1樓nuaacims(沉底魚)回復于2003072809:38:39得分0java沒指針,有一個類似指針的reference,java中內(nèi)存的
2、析構(gòu)由GC垃圾收集器自動進行。Top2樓lemonutzf(lemonut)回復于2003072810:09:09得分0to:ny_lau(我行我素)我想你是理解錯了CC的內(nèi)存分配是:全局,靜態(tài)變量放到靜態(tài)存儲區(qū)中;局部變量放到棧中;動態(tài)分配的變量放到堆中;java.............:對象放到堆中;對象放到堆中;引用,基本類型放到棧中,引用,基本類型放到棧中,有的放到靜態(tài)存儲區(qū)中;有的放到靜態(tài)存儲區(qū)中;Top3樓devzhao(
3、wincer)回復于2003072810:12:26得分0我想樓主對CC確實理解錯了,應該是lemonutzf(lemonut)所說的:CC的內(nèi)存分配是:全局,靜態(tài)變量放到靜態(tài)存儲區(qū)中;局部變量放到棧中;動態(tài)分配的變量放到堆中;Top4樓wade530(wade)回復于2003072810:42:31得分0同上意見Top5樓susanyw(susan)回復于2003072814:14:25得分0c#和java等語言稱為內(nèi)存托管的程序設計
4、語言,他們沒有指針的概念,他們的內(nèi)存分配與回收全由os或編譯器完成,而現(xiàn)在也出現(xiàn)了所謂“托管的c”。在c中內(nèi)存一般從“堆”和“?!鄙戏峙洌麄兊膮^(qū)別是:1)heap由用戶(程序員)負責內(nèi)存的分配與回收,既c中的“new”和明確區(qū)分堆與棧在bbs上,堆與棧的區(qū)分問題,似乎是一個永恒的話題,由此可見,初學者對此往往是混淆不清的,所以我決定拿他第一個開刀。首先,我們舉一個例子:voidf()intp=newint[5]這條短短的一句話就包含了
5、堆與棧,看到new,我們首先就應該想到,我們分配了一塊堆內(nèi)存,那么指針p呢?他分配的是一塊棧內(nèi)存,所以這句話的意思就是:在棧內(nèi)存中存放了一個指向一塊堆內(nèi)存的指針p。在程序會先確定在堆中分配內(nèi)存的大小,然后調(diào)用operatnew分配內(nèi)存,然后返回這塊內(nèi)存的首地址,放入棧中,他在VC6下的匯編代碼如下:00401028push14h0040102Acalloperatnew(00401060)0040102Faddesp400401032m
6、ovdwdptr[ebp8]eax00401035moveaxdwdptr[ebp8]00401038movdwdptr[ebp4]eax這里,我們?yōu)榱撕唵尾]有釋放內(nèi)存,那么該怎么去釋放呢?是p么?澳,錯了,應該是[]p,這是為了告訴編譯器:我刪除的是一個數(shù)組,VC6就會根據(jù)相應的Cookie信息去進行釋放內(nèi)存的工作。好了,我們回到我們的主題:堆和棧究竟有什么區(qū)別?主要的區(qū)別由以下幾點:1、管理方式不同;2、空間大小不同;3、能否產(chǎn)生
7、碎片不同;4、生長方向不同;5、分配方式不同;6、分配效率不同;管理方式:對于棧來講,是由編譯器自動管理,無需我們手工控制;對于堆來說,釋放工作由程序員控制,容易產(chǎn)生memyleak。空間大?。阂话銇碇v在32位系統(tǒng)下,堆內(nèi)存可以達到4G的空間,從這個角度來看堆內(nèi)存幾乎是沒有什么限制的。但是對于棧來講,一般都是有一定的空間大小的,例如,在VC6下面,默認的??臻g大小是1M(好像是,記不清楚了)。當然,我們可以修改:打開工程,依次操作菜單如
8、下:ProjectSettingLink,在Categy中選中Output,然后在Reserve中設定堆棧的最大值和commit。注意:reserve最小值為4Byte;commit是保留在虛擬內(nèi)存的頁文件里面,它設置的較大會使棧開辟較大的值,可能增加內(nèi)存的開銷和啟動時間。碎片問題:對于堆來講,頻繁的new勢必會造成內(nèi)存空間的不連續(xù),從而造成大量的碎片,使程序效率降低。對于棧來講,則不會存在這個問題,因為棧是先進后出的隊列,他們是如此的
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- c++內(nèi)存分配
- c c++語言變量聲明內(nèi)存分配
- java內(nèi)存分配與管理是java的核心技術(shù)之一
- 內(nèi)存分配
- java高內(nèi)存編程
- java堆內(nèi)存與棧內(nèi)存的區(qū)別
- 內(nèi)存區(qū)劃分、內(nèi)存分配、常量存儲區(qū)、堆、棧、自由存儲區(qū)、全局區(qū)[c++][內(nèi)存管理]
- c,c++內(nèi)存分配的詳細講解包括堆,棧,數(shù)據(jù)段等
- 支持內(nèi)存不連續(xù)分配
- c語言內(nèi)存講解
- c++內(nèi)存管理
- java內(nèi)存原型及工作原理簡介
- Java內(nèi)存泄漏規(guī)約及其工具研究.pdf
- Java內(nèi)存泄漏發(fā)現(xiàn)技術(shù)研究.pdf
- Memcached內(nèi)存分配算法及優(yōu)化.pdf
- Java程序內(nèi)存使用分析技術(shù)研究.pdf
- java內(nèi)存的詳細分析(包括垃圾回收)
- 內(nèi)存分配方式,堆和棧區(qū)別
- 第八講內(nèi)存的動態(tài)分配-
- 北大青鳥西安華美校區(qū)告訴你分配內(nèi)存時如何減少內(nèi)存碎片
評論
0/150
提交評論