棧存儲什麼
⑴ 堆和棧分別用於保存什麼
棧區(stack)― 由編譯器自動分配釋放 ,存放函數的參數值,局部變數的值等。其操作方式類似於數據結構中的棧。
堆區(heap) ― 一般由程序員分配釋放, 若程序員不釋放,程序結束時可能由OS回收 。注意它與數據結構中的堆是兩回事,分配方式倒是類似於鏈表,呵呵。
⑵ C語言中的棧、堆是什麼
C語言中的堆和棧都是一種數據項按序排列的數據結構。
棧就像裝數據的桶或箱子
我們先從大家比較熟悉的棧說起吧,它是一種具有後進先出性質的數據結構,也就是說後存放的先取,先存放的後取。
這就如同我們要取出放在箱子裡面底下的東西(放入的比較早的物體),我們首先要移開壓在它上面的物體(放入的比較晚的物體)。
堆像一棵倒過來的樹
而堆就不同了,堆是一種經過排序的樹形數據結構,每個結點都有一個值。
通常我們所說的堆的數據結構,是指二叉堆。堆的特點是根結點的值最小(或最大),且根結點的兩個子樹也是一個堆。
由於堆的這個特性,常用來實現優先隊列,堆的存取是隨意,這就如同我們在圖書館的書架上取書。
雖然書的擺放是有順序的,但是我們想取任意一本時不必像棧一樣,先取出前面所有的書,書架這種機制不同於箱子,我們可以直接取出我們想要的書。
(2)棧存儲什麼擴展閱讀:
關於堆和棧區別的比喻
使用棧就象我們去飯館里吃飯,只管點菜(發出申請)、付錢、和吃(使用),吃飽了就走,不必理會切菜、洗菜等准備工作和洗碗、刷鍋等掃尾工作,他的好處是快捷,但是自由度小。
使用堆就象是自己動手做喜歡吃的菜餚,比較麻煩,但是比較符合自己的口味,而且自由度大。
參考資料來源:網路-堆棧
⑶ 在什麼情況下可以用棧來存儲數據
棧:特點就是一個先進後出的結構。
棧的應用:非常廣泛,在CPU內部就有提供棧這個機制。主要用途:函數調用和返回,數字轉字元,表達式求值,走迷宮等等。
在CPU內部棧主要是用來進行子程序調用和返回,中斷時數據保存和返回。在編程語言中:主要用來進行函數的調用和返回。
可以說在計算機中,只要數據的保存滿足先進後出的原理,都優先考慮使用棧,所以棧是計算機中不可缺的機制。
⑷ 棧是什麼意思
棧,又名堆棧,它是一種運算受限的線性表。其限制是僅允許在表的一端進行插入和刪除運算。這一端被稱為棧頂,相對地,把另一端稱為棧底。
向一個棧插入新元素又稱作進棧、入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素;從一個棧刪除元素又稱作出棧或退棧,它是把棧頂元素刪除掉,使其相鄰的元素成為新的棧頂元素。
棧按照先進後出的原則存儲數據,先進入的數據被壓入棧底,最後的數據在棧頂,需要讀數據的時候從棧頂開始彈出數據(最後一個數據被第一個讀出來)。棧具有記憶作用,對棧的插入與刪除操作中,不需要改變棧底指針。
(4)棧存儲什麼擴展閱讀:
1、棧(stack)與堆(heap)都是java用來在Ram中存放數據的地方。與C++不同,Java自動管理棧和堆,程序員不能直接地設置棧或堆。
2、棧的優勢是,存取速度比堆要快,僅次於直接位於CPU中的寄存器。但缺點是,存在棧中的數據大小與生存期必須是確定的,缺乏靈活性。
另外,棧數據在多個線程或者多個棧之間是不可以共享的,但是在棧內部多個值相等的變數是可以指向一個地址的,詳見第3點。
堆的優勢是可以動態地分配內存大小,生存期也不必事先告訴編譯器,Java的垃圾收集器會自動收走這些不再使用的數據。但缺點是,由於要在運行時動態分配內存,存取速度較慢。
⑸ java中的,堆,棧,還有方法區都是用來放什麼的
棧里存放的是值類型(int、float等)的值和引用類型(String、你自己創建的類對象等)在堆中的地址;堆中存放引用類u型的值,如果堆中某個值的地址在棧中沒有被指向,他就會被GC回收。
方法區存儲所有的類和靜態變數。
⑹ 棧的順序存儲是什麼
由於棧是運算受限的線性表,因此線性表的存儲結構對棧也適用,而線性表有順序存儲和鏈式存儲兩種,所以棧也有順序存儲和鏈式存儲兩種。
1.棧的順序存儲棧的順序存儲是利用一組地址連續的存儲單元依次存放從棧底到棧頂的數據元素,並附設指針top指示棧頂。
2.棧的順序存儲類型定義1)用內存動態分配方式定義棧的順序存儲(1)棧的順序存儲表示。
順序棧本質上是順序表的簡化,由於棧底位置是固定不變的,所以可以將棧底位置設置在存儲空間的基地址上,棧頂位置是隨著進棧和退棧操作而變化的,故用top來指示當前棧頂元素的下一個位置,通常稱top為棧頂指針。
⑺ 計算機里棧是什麼意思啊
分析如下:
棧是一種數據結構。
1、棧作為一種數據結構,是一種只能在一端進行插入和刪除操作的特殊線性表。它按照後進先出的原則存儲數據,先進入的數據被壓入棧底,最後的數據在棧頂,需要讀數據的時候從棧頂開始彈出數據(最後一個數據被第一個讀出來)。棧具有記憶作用,對棧的插入與刪除操作中,不需要改變棧底指針。
2、棧是允許在同一端進行插入和刪除操作的特殊線性表。允許進行插入和刪除操作的一端稱為棧頂(top),另一端為棧底(bottom);棧底固定,而棧頂浮動;棧中元素個數為零時稱為空棧。插入一般稱為進棧(PUSH),刪除則稱為退棧(POP)。棧也稱為後進先出表。
3、棧可以用來在函數調用的時候存儲斷點,做遞歸時要用到棧。
拓展資料:
1、棧(stack)又名堆棧,它是一種運算受限的線性表。其限制是僅允許在表的一端進行插入和刪除運算。這一端被稱為棧頂,相對地,把另一端稱為棧底。向一個棧插入新元素又稱作進棧、入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素;從一個棧刪除元素又稱作出棧或退棧,它是把棧頂元素刪除掉,使其相鄰的元素成為新的棧頂元素。
2、棧是限定僅在表頭進行插入和刪除操作的線性表。要搞清楚這個概念,首先要明白」棧「原來的意思,如此才能把握本質。"棧「者,存儲貨物或供旅客住宿的地方,可引申為倉庫、中轉站,所以引入到計算機領域里,就是指數據暫時存儲的地方,所以才有進棧、出棧的說法。
(資料來源:網路:棧)
⑻ 堆棧一般用來存放什麼內容
SP是堆棧指示器
BP是基址指示器
SP,BP一般與段寄存器SS
聯用,以確定堆棧寄存器中某一單元的地址,SP用以指示棧頂的偏移地址,而BP可
作為堆棧區中的一個基地址,所以通常堆棧的數據區基地址是放在BP中
⑼ 什麼是棧存儲區
在C++中,內存分成4個區,他們分別是堆,棧,靜態存儲區和常量存儲區
1、棧,就是那些由編譯器在需要的時候分配,在不需要的時候自動清除的變數的存
儲區.裡面的變數通常是局部變數,函數參數等.
2、堆,又叫自由存儲區,它是在程序執行的過程中動態分配的,它最大的特性就是動.
態性.由new分配的內存塊,他們的釋放編譯器不去管,由我們的應用程序去控制,
一般一個new就要對應一個delete.如果程序員沒有釋放掉,那麼在程序結束後,
操作系統會自動回收.如果分配了堆對象,卻忘記了釋放,就會產生內存泄漏.而
如果已釋放了對象,卻沒有將相應的指針置為NULL,該指針就是"懸掛指針".
3、靜態存儲區.所有的靜態對象,全局對象都於靜態存儲區分配.
4、常量存儲區,這是一塊比較特殊的存儲區,他們裡面存放的是常量,不允許修改
(當然,你要通過非正當手段也可以修改,而且方法很多)
常量字元串都存放在靜態存儲區,返回的是常量字元串的首地址.
⑽ java堆和棧分別存什麼東西
還是我來告訴你吧!棧上不會存儲方法,方法是隨對象變化的,內存給棧分配的內存很小,
java中在內存中可以分為3大部分棧,堆,靜態區,方法作為對象的一部分存儲在堆中,堆中還包含池(用來存儲String類型)。