請問儲存器中的棧怎麼理解,組合語言中的棧,壓棧,出棧是什麼意思

2022-12-15 10:55:47 字數 5113 閱讀 7976

1樓:

這沒什麼可以解釋的,也不難理解啊。就是排隊,誰先來誰最後走,誰後來誰先走。給你說個應用吧,就是求四則運算的表示式的值,1*[(1+2)*3+4],棧裡存的東西有括號還有運算子,先存進去了 [ ,然後來了個(,然後又來了個 ),就倆()一起出棧,然後就是 ] ,再一起出棧。

這樣就實現這個運算了。

2樓:匿名使用者

就相當與一個試管,往裡面扔硬幣,你扔了很多硬幣了,要取下面的,只能把試管上面的先倒出來,而如果要取最上面那個,就可以直接取到了

如何理解棧的生長方向

3樓:仲皖慧

首先,很奇怪你這問題怎麼跑到了天文學分類

其次,棧的生長方向的關鍵就是棧的定義,定義一個棧底--這是高地址,每次壓一個資料入棧,棧指標esp減去4(32位系統下),所以棧頂是向著記憶體低地址方向生長的。

說句實話,現在的教材好像都不太提堆的問題了,堆一般是資料段,包括全域性變數和常量等,自然和正常的**段類似,從低地址往高地址寫了,

而堆的定義並不像棧那樣嚴格,也沒有什麼嚴格的資料結構,我想這就是說堆沒有生長方向的原因吧

組合語言中的棧,壓棧,出棧是什麼意思

4樓:匿名使用者

就像一個裝乒乓球的盒子,只有一個口能開啟

裡面一個球不放,就是空棧

往裡面放一個球,就是壓棧

從裡邊拿一個球,就是出棧

都放滿了,就是滿棧,再放就會溢位

5樓:匿名使用者

棧就是分配的一些連續的記憶體空間 注意是連續的壓棧就是把一個資料放到棧中的頂部,然後依次往上疊,就和疊一堆書一樣出棧就是把棧頂部的資料拿出來,就像是把一疊書的最上面的一本拿出來一樣

6樓:匿名使用者

說的通俗點,就是一個資料的儲存與讀取。棧是個儲存器,壓棧就是往裡面存資料,出棧就是取資料

兩棧共享一個儲存空間,判定棧滿的條件是什麼?

7樓:

top[1]+1=top[2],樓上說top[1]=top[2],那樣就會導致一個棧的棧頂指標指向另一個棧的棧頂,正確的是,兩個棧頂指標相鄰不交叉。。。。

8樓:匿名使用者

肯定是top[1]+1=top[2]啊,你想要是top[1]=top[2]那麼,兩個棧頂在同一個位置,等於一個位置存了兩個元素,說明你前一步插入的元素沒有空間了,就是1和2相鄰的時候已經滿了。

9樓:匿名使用者

還是我來告訴你吧!應該是top[1]=top[2]吧,因為兩個棧頂都對到一起了才能說明棧的儲存已達到極限了,我是這麼理解的。

10樓:夕影輕快

說的都不算錯,要看棧空的條件是什麼

c語言中,什麼是棧,什麼是堆

11樓:非常可愛

1、棧區(stack):由編譯器自動分配釋放,存放函式的引數值,區域性變數等值。區域性變數,任務執行緒函式之類的是放在(使用)棧裡面的,棧利用率高一些。

其操作方式類似於資料結構中的棧。特別,棧是屬於執行緒的,每一個執行緒會有一個自己的棧。

2、堆區(heap):一般由程式設計師分配釋放,若程式設計師不釋放,則可能會引起記憶體洩漏。注意它和資料結構中的堆是兩回事,分配方式倒是類似於連結串列,常見的就是malloc出來的都是屬於堆區,就像固定出來的區域,到free的時候才釋放,有點類似全域性的,靜態的。

擴充套件資料

棧記憶體是由編譯器自動分配與釋放的,它有兩種分配方式:靜態分配和動態分配。

1、靜態分配是由編譯器自動完成的,如區域性變數的分配(即在一個函式中宣告一個int型別的變數i時,編譯器就會自動開闢一塊記憶體以存放變數i)。

2、動態分配由alloca函式進行分配,但是棧的動態分配與堆是不同的,它的動態分配是由編譯器進行釋放,無需任何手工實現。

12樓:人間一枚惆悵客

棧是系統自動分配記憶體的,堆是程式設計師自己動態申請的記憶體比如,你int i;i就是存放在棧記憶體裡面比如char *p=(char*)malloc(sizeof(char));p指向的記憶體就是存放在堆記憶體裡面的

希望能幫到你

13樓:圈圈叉叉叉叉圈

在c/c++中,記憶體分成5個區,他們分別是堆、棧、自由儲存區、全域性/靜態儲存區和常量儲存區。

如果你的這兩個語句是出現在全域性部分,那這個i就是被儲存在全域性/靜態儲存區;如果是出現在區域性某個函式裡,那i就被儲存的棧裡面。具體可以怎麼理解?

棧裡的東西自動分配記憶體空間,自動釋放記憶體,而堆裡面的東西只要是用到記憶體的都要手動分配,malloc函式在這個時候就起作用了。

棧:就是那些由編譯器在需要的時候分配,在不需要的時候自動清楚的變數的儲存區。裡面的變數通常是區域性變數、函式引數等。

堆:就是那些由new分配的記憶體塊,他們的釋放編譯器不去管,由我們的應用程式去控制,一般一個new就要對應一個delete。如果程式設計師沒有釋放掉,那麼在程式結束後,作業系統會自動**。

自由儲存區:就是那些由malloc等分配的記憶體塊,他和堆是十分相似的,不過它是用free來結束自己的生命的。

14樓:楊塵一

棧(stack)又名堆疊,它是一種運算受限的線性表。其限制是僅允許在表的一端進行插入和刪除運算。這一端被稱為棧頂,相對地,把另一端稱為棧底。

向一個棧插入新元素又稱作進棧、入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素;從一個棧刪除元素又稱作出棧或退棧,它是把棧頂元素刪除掉,使其相鄰的元素成為新的棧頂元素。

堆,一段完全獨立於當前函式或者棧幀的記憶體區。如果一個函式中宣告瞭一些變數,而且希望當這個函式完成時其中宣告的變數仍然存在,就可以將這些變數置於堆中。 堆和棧相比,沒那麼清晰的結構性。

可以把堆可作是一「堆」小玩藝。程式可以在任何時間向這個「堆」增加新的東西,或者修改堆中已有的東西。

15樓:匿名使用者

**中使用的普通變數、陣列、指標等,使用的都是稱作「堆」的記憶體,而呼叫函式時傳遞的引數則使用「棧」記憶體。這是系統管的事,一開始,程式設計者沒必要關心這方面的內容。

16樓:務遠祝煙

堆疊是一種執行「後進先出」演算法的資料結構。

設想有一個直徑不大、一端開口一端封閉的竹筒。有若干個寫有編號的小球,小球的直徑比竹筒的直徑略小。現在把不同編號的小球放到竹筒裡面,可以發現一種規律:

先放進去的小球只能後拿出來,反之,後放進去的小球能夠先拿出來。所以「先進後出」就是這種結構的特點。

堆疊就是這樣一種資料結構。它是在記憶體中開闢一個儲存區域,資料一個一個順序地存入(也就是「壓入——push」)這個區域之中。有一個地址指標總指向最後一個壓入堆疊的資料所在的資料單元,存放這個地址指標的暫存器就叫做堆疊指示器。

開始放入資料的單元叫做「棧底」。資料一個一個地存入,這個過程叫做「壓棧」。在壓棧的過程中,每有一個資料壓入堆疊,就放在和前一個單元相連的後面一個單元中,堆疊指示器中的地址自動加1。

讀取這些資料時,按照堆疊指示器中的地址讀取資料,堆疊指示器中的地址數自動減

1。這個過程叫做「彈出pop」。如此就實現了後進先出的原則。

堆疊是計算機中最常用的一種資料結構,比如函式的呼叫在計算機中是用堆疊實現的。

堆疊可以用陣列儲存,也可以用以後會介紹的連結串列儲存。

下面是一個堆疊的結構體定義,包括一個棧頂指標,一個資料項陣列。棧頂指標最開始指向-1,然後存入資料時,棧頂指標加1,取出資料後,棧頂指標減1。

#define

max_size

100typedef

intdata_type;

struct

stack

;在c++中,記憶體分成5個區,他們分別是堆、棧、自由儲存區、全域性/靜態儲存區和常量儲存區。

棧,就是那些由編譯器在需要的時候分配,在不需要的時候自動清楚的變數的儲存區。裡面的變數通常是區域性變數、函式引數等。

堆,就是那些由new分配的記憶體塊,他們的釋放編譯器不去管,由我們的應用程式去控制,一般一個new就要對應一個delete。如果程式設計師沒有釋放掉,那麼在程式結束後,作業系統會自動**。

自由儲存區,就是那些由malloc等分配的記憶體塊,他和堆是十分相似的,不過它是用free來結束自己的生命的。

全域性/靜態儲存區,全域性變數和靜態變數被分配到同一塊記憶體中,在以前的c語言中,全域性變數又分為初始化的和未初始化的,在c++裡面沒有這個區分了,他們共同佔用同一塊記憶體區。

常量儲存區,這是一塊比較特殊的儲存區,他們裡面存放的是常量,不允許修改(當然,你要通過非正當手段也可以修改,而且方法很多.

17樓:昔玉英左汝

計算機中的記憶體分為兩部分:一部分是

棧(stack,也稱堆疊),另一部分是堆(heap)。

棧,可以看作是一摞卡片,最上面的卡片表示程式的當前作用域,這往往就是當前正在執行的函式。當前函式中宣告的所有變數都置於棧頂幀中,即佔用棧頂幀的內

存,這就相當於一摞卡片中最上面的一張卡片。如果當前函式呼叫了另一個函式,舉例來說,當前函式foo()呼叫了另一個函式bar(),就會在這摞卡片上

再加一個新的卡片,這樣bar()就有了自己的棧幀(stack

frame)以供使用。從foo()傳遞到bar()的所有引數都會從

foo()棧幀複製到bar()棧幀中。(注:棧幀很有意義,因為棧幀可以為每個函式提供一個獨立的記憶體工作區。如果一個變數是在foo()棧幀中宣告

的,那麼呼叫bar()函式不會對它帶來改變,除非你專門要求修改這個變數。另外,foo()函式執行結束時,棧幀即消失,該函式中宣告的所有變數都不會

再佔用記憶體了。)

堆,一段完全獨立於當前函式或者棧幀的記憶體區。如果一個函式中宣告瞭一些變數,而且希望當這個函式完成時其中宣告的變數仍然存在,就可以將這些變數置於堆中。

堆和棧相比,沒那麼清晰的結構性。可以把堆可作是一「堆」小玩藝。程式可以在任何時間向這個「堆」增加新的東西,或者修改堆中已有的東西。

18樓:信耕順肖雀

在計算機領域,堆疊是一個不容忽視的概念,但是很多人甚至是計算機專業的人也沒有明確堆疊其實是兩種資料結構。堆疊都是一種資料項按序排列的資料結構,只能在一端(稱為棧頂(top))對資料項進行插入和刪除。要點:

堆:順序隨意棧:後進先出(last-in/first-out)

二維陣列的元素在儲存器中是如何儲存的

二維陣列在記憶體中按行存放。二維陣列在c語言中的定義為 int a x y 具體理解為二維陣列a,有x行資料,每行資料有y個。解釋 當我們在進行資料的存取時,在無x的條件下不可能取出值。但是在沒有y的條件下,可以通過地址取出x行的某個值。當我們知道x的值,代表我們能確定這一行的首地址,因為二維陣列按...

在搜狗瀏覽器中,怎樣把儲存在收藏夾中的網頁儲存到電腦中

來說說如何把ie的收藏夾匯入搜狗瀏覽器中。在搜狗瀏覽器的 收藏 選單中,直接選擇 從ie瀏覽器匯入收藏 就ok啦。下面說說如何把傲遊中的收藏夾匯入搜狗瀏覽器中 讓人惋惜的瀏覽器,軟體產品就是這樣,不進則退 第一步 把傲遊收藏夾匯入到ie中。找到傲遊的 匯出收藏 功能,選擇 匯出到ie收藏夾 第二步 ...

意味中的怎麼理解意味?

翻譯為說,說話的說,一般強調說這個動作。意味 翻譯成中文就是你剛說的話是什麼意思?日語語法中,指沒有明確的說話者,或者是所說的事情不是很明確的時候使用。一般以連體詞的形式出現。例如 1 翻譯為硬要 非要說的話。2 意味 翻譯為從這層 某種含義意思上來說。3 點 翻譯為從這點來說的話。說 的意思,是一...