當前位置:首頁 » 存儲配置 » 棧堆存儲在哪

棧堆存儲在哪

發布時間: 2022-04-13 12:14:44

① 在java編寫的程序中,棧內存跟堆內存分別存儲的是什麼呢

你只需要知道兩點

堆中存放具體數據
棧中存放你所命名的變數名字

既然叫匿名函數
自然沒有名字
所以這就是在堆里有具體數據
而棧中沒有名字指向這個數據的意思

② java堆和棧分別存什麼東西

還是我來告訴你吧!棧上不會存儲方法,方法是隨對象變化的,內存給棧分配的內存很小,
java中在內存中可以分為3大部分棧,堆,靜態區,方法作為對象的一部分存儲在堆中,堆中還包含池(用來存儲String類型)。

③ 堆,棧基本概念,存什麼,程序運行在哪.類載入過程,靜態方法類所有類名直接

靜態方法的話,直接用類名字來調用靜態的方法;

因為靜態對象(變數和方法)都是隨著類的載入而載入。
Java 把內存劃分成兩種:一種是棧內存,另一種是堆內存。

在函數中定義的一些基本類型的變數和對象的引用變數都在函數的棧內存中分配。

當在一段代碼塊定義一個變數時,Java就在棧中為這個變數分配內存空間,當超過變數的作用域後,Java會自動釋放掉為該變數所分配的內存空間,該內存空間可以立即被另作他用。

堆內存用來存放由new創建的對象和數組。
在堆中分配的內存,由Java虛擬機的自動垃圾回收器來管理。

在堆中產生了一個數組或對象後,還可以在棧中定義一個特殊的變數,讓棧中這個變數的取值等於數組或對象在堆內存中的首地址,棧中的這個變數就成了數組或對象的引用變數。

引用變數就相當於是為數組或對象起的一個名稱,以後就可以在程序中使用棧中的引用變數來訪問堆中的數組或對象。

java中變數在內存中的分配

1、類變數(static修飾的變數):在程序載入時系統就為它在堆中開辟了內存,堆中的內存地址存放於棧以便於高速訪問。靜態變數的生命周期--一直持續到整個"系統"關閉

2、實例變數:當你使用java關鍵字new的時候,系統在堆中開辟並不一定是連續的空間分配給變數(比如說類實例),然後根據零散的堆內存地址,通過哈希演算法換算為一長串數字以表徵這個變數在堆中的"物理位置"。 實例變數的生命周期--當實例變數的引用丟失後,將被GC(垃圾回收器)列入可回收「名單」中,但並不是馬上就釋放堆中內存

3、局部變數:局部變數,由聲明在某方法,或某代碼段里(比如for循環),執行到它的時候在棧中開辟內存,當局部變數一但脫離作用域,內存立即釋放
00

http://wenda.so.com/q/1480853213721532?src=9999&cid-pre=1000204

④ 堆和棧的區別 全局變數在哪裡存 ,靜態變數在哪裡存

問題1:
堆Heap指的是用malloc和free,new和delete等函數動態創建的內存空間,由程序員自己維護和管理;
棧Stack指的是函數1跳轉進入子函數2之前,為了保護函數1的現場(CPU寄存器狀態等信息,委的就是子函數2執行結束,還能夠返回到函數1)操作系統自動進行的壓棧和出棧操作;另外,我記得函數1進入子函數2之後,子函數2內部的臨時變數也是由操作系統在棧中分配的。
問題2:
全局變數在編譯時就被編譯器固定在「數據段」了,佔了數據段中的位置(存儲空間);
靜態變數我沒有研究過,不敢輕言。

⑤ 下一個堆棧的地址保存在哪裡

棧是連續的線性內存,只需要兩個寄存器保存棧頂和棧底就行了,剩下的工作有占調用者來控制,比如彈出一個字元,當前棧頂為所需地址,然後棧頂指針自減1,新的指針內容就是下一個要彈出內容的地址

⑥ 堆棧在內存的什麼區

五大內存分區
在C++中,內存分成5個區,他們分別是堆、棧、自由存儲區、全局/靜態存儲區和常量存儲區。
棧,就是那些由編譯器在需要的時候分配,在不需要的時候自動清楚的變數的存儲區。裡面的變數通常是局部變數、函數參數等。
堆,就是那些由new分配的內存塊,他們的釋放編譯器不去管,由我們的應用程序去控制,一般一個new就要對應一個delete.如果程序員沒有釋放掉,那麼在程序結束後,操作系統會自動回收。
自由存儲區,就是那些由malloc等分配的內存塊,他和堆是十分相似的,不過它是用free來結束自己的生命的。
全局/靜態存儲區,全局變數和靜態變數被分配到同一塊內存中,在以前的C語言中,全局變數又分為初始化的和未初始化的,在C++裡面沒有這個區分了,他們共同佔用同一塊內存區。
常量存儲區,這是一塊比較特殊的存儲區,他們裡面存放的是常量,不允許修改(當然,你要通過非正當手段也可以修改,而且方法很多)
首先,我們看一個例子:
void f() { int* p=new int[5]; }
這條短短的一句話就包含了堆與棧,看到new,我們首先就應該想到,我們分配了一塊堆內存,那麼指針p呢?他分配的是一塊棧內存,所以這句話的意思就是:在棧內存中存放了一個指向一塊堆內存的指針p.在程序會先確定在堆中分配內存的大小,然後調用operator new分配內存,然後返回這塊內存的首地址,放入棧中,
好了,我們回到我們的主題:堆和棧究竟有什麼區別?
主要的區別由以下幾點:
1、管理方式不同;
2、空間大小不同;
3、能否產生碎片不同;
4、生長方向不同;
5、分配方式不同;
6、分配效率不同;
管理方式:對於棧來講,是由編譯器自動管理,無需我們手工控制;對於堆來說,釋放工作由程序員控制,容易產生memory leak.
空間大小:一般來講在32位系統下,堆內存可以達到4G的空間,從這個角度來看堆內存幾乎是沒有什麼限制的。但是對於棧來講,一般都是有一定的空間大小的,例如,在VC6下面,默認的棧空間大小是1M(好像是,記不清楚了)。當然,我們可以修改:打開工程,依次操作菜單如下:Project->Setting->Link,在Category 中選中Output,然後在Reserve中設定堆棧的最大值和commit.注意:reserve最小值為4Byte;commit是保留在虛擬內存的頁文件裡面,它設置的較大會使棧開辟較大的值,可能增加內存的開銷和啟動時間。
碎片問題:對於堆來講,頻繁的new/delete勢必會造成內存空間的不連續,從而造成大量的碎片,使程序效率降低。對於棧來講,則不會存在這個問題,因為棧是先進後出的隊列,他們是如此的一一對應,以至於永遠都不可能有一個內存塊從棧中間彈出,在他彈出之前,在他上面的後進的棧內容已經被彈出,詳細的可以參考數據結構,這里我們就不再一一討論了。
生長方向:對於堆來講,生長方向是向上的,也就是向著內存地址增加的方向;對於棧來講,它的生長方向是向下的,是向著內存地址減小的方向增長。
分配方式:堆都是動態分配的,沒有靜態分配的堆。棧有2種分配方式:靜態分配和動態分配。靜態分配是編譯器完成的,比如局部變數的分配。動態分配由alloca函數進行分配,但是棧的動態分配和堆是不同的,他的動態分配是由編譯器進行釋放,無需我們手工實現。

⑦ 什麼是堆和棧,它們在哪兒

在計算機領域,堆棧是一個不容忽視的概念,堆棧是兩種數據結構。堆棧都是一種數據項按序排列的數據結構,只能在一端(稱為棧頂(top))對數據項進行插入和刪除。在單片機應用中,堆棧是個特殊的存儲區,主要功能是暫時存放數據和地址,通常用來保護斷點和現場。要點:堆,隊列優先,先進先出 。棧,先進後出(First-In/Last-Out)。

⑧ C語言中的棧、堆是什麼

C語言中的堆和棧都是一種數據項按序排列的數據結構。

棧就像裝數據的桶或箱子

我們先從大家比較熟悉的棧說起吧,它是一種具有後進先出性質的數據結構,也就是說後存放的先取,先存放的後取。

這就如同我們要取出放在箱子裡面底下的東西(放入的比較早的物體),我們首先要移開壓在它上面的物體(放入的比較晚的物體)。

堆像一棵倒過來的樹

而堆就不同了,堆是一種經過排序的樹形數據結構,每個結點都有一個值。

通常我們所說的堆的數據結構,是指二叉堆。堆的特點是根結點的值最小(或最大),且根結點的兩個子樹也是一個堆。

由於堆的這個特性,常用來實現優先隊列,堆的存取是隨意,這就如同我們在圖書館的書架上取書。

雖然書的擺放是有順序的,但是我們想取任意一本時不必像棧一樣,先取出前面所有的書,書架這種機制不同於箱子,我們可以直接取出我們想要的書。

(8)棧堆存儲在哪擴展閱讀:

關於堆和棧區別的比喻

使用棧就象我們去飯館里吃飯,只管點菜(發出申請)、付錢、和吃(使用),吃飽了就走,不必理會切菜、洗菜等准備工作和洗碗、刷鍋等掃尾工作,他的好處是快捷,但是自由度小。

使用堆就象是自己動手做喜歡吃的菜餚,比較麻煩,但是比較符合自己的口味,而且自由度大。

參考資料來源:網路-堆棧



⑨ JAVA 中棧內存在哪堆內存在哪都指得是什麼

都在ram里
棧存基本變數和局部不變數
堆引用類型的和靜態變數

⑩ 堆棧是那裡的存儲空間是在內存上還是硬碟上面的

內存中獨立的一塊存儲區域,是內存上的

熱點內容
串列存儲器編成器軟體 發布:2024-11-20 13:35:46 瀏覽:806
電腦哪些配置功耗高 發布:2024-11-20 13:21:28 瀏覽:352
加密軟體安裝 發布:2024-11-20 13:21:16 瀏覽:176
android藍牙播放 發布:2024-11-20 13:11:54 瀏覽:237
網易我的世界domcer伺服器激活碼 發布:2024-11-20 12:58:35 瀏覽:467
linux版本歷史 發布:2024-11-20 12:41:12 瀏覽:947
win10安裝linux雙系統 發布:2024-11-20 12:39:53 瀏覽:46
我的世界求伺服器ip 發布:2024-11-20 12:27:22 瀏覽:360
序列匹配的演算法 發布:2024-11-20 12:23:27 瀏覽:190
電腦版如何加入手機版伺服器 發布:2024-11-20 12:22:53 瀏覽:62