誰知道把「堆」和 棧 放在一起叫的歷史原因?

2025-04-01 14:30:10 字數 3580 閱讀 9993

1樓:網友

據我所知,dos下程式是獨佔方式,堆分為近堆和遠堆,近堆和棧是在資料段開闢的同一塊記憶體位址,棧從下往上增長,堆從上向下分配,中間掘橡沒有規定分界線,所以程式控制不當,如深層次的遞迴,大量的動漏培態位址分配很容易造成堆疊衝突,即堆疊位址重疊,從而造成宕機和程式執行異常。堆和棧連在一起說的原因就是如此。

至於遠堆則是指在資料段和**段以外計算機所有沒有使用的剩餘基本記憶體。

另返散唯外,一般把堆疊合起來說的,那它的意思是棧,可不是堆。

2樓:熊曼珍

和堆相關的棧解釋。

棧:竹木編成的遮蔽物或其他東西。

引申:儲存貨物的房屋。

將物品「悉薯堆」睜族者於「棧」中。

這個是文字的歷史解釋,穗遲程式設計中的術語,只是個命名而已。

堆和棧的區別?

3樓:北大青鳥志遠科技

棧:在編譯過程中分配的記憶體空間是由作業系統(編譯器)自動分配和釋放的,而堆疊上的空間是有限的。在編譯過程中,程式在堆疊上同時為變數和函式分配記憶體,並且在堆疊上執行執行時函式呼叫的引數傳遞。

堆:在程式執行期間動態分配的記憶體空間,您可以根據程式執行的方式來確定要分配的堆記憶體的大小。發行版通常由程式設計師分配。記憶體函式的分配,如new和malloc,分配給堆。

棧是機器系統提供的資料結構,堆由c/c++函式庫提供。

棧是系統提供的功能,其特點是快速高效,缺點是有限的,資料不靈活;該堆疊是函式庫的函式,具有靈活性和方便性的特點,資料被廣泛使用,但效率可以降低。棧是系統資料結構,它是流程/執行緒的唯一。堆是函式庫的內部資料結構,不一定是唯一的。

不同堆分配的記憶體不能相互操作。堆疊空間有兩種靜態分佈和動態分配。靜態分配由編譯器完成,例如自動變數(自動)分佈。

動態分配由alloca函式完成。棧的動態分配不需要釋放(自動),也沒有釋放函式。對於便攜程式,不鼓勵動態分配堆疊。

堆空間分配是動態的,雖然在程式的末尾,所有的資料空間都將被釋放回系統中,但是精確的應用程式記憶體/空閒記憶體匹配是良好應用程式的基本要素。

堆記憶體用於儲存由新分配的記憶體在堆中建立的物件和陣列,並由虛擬機器的自動垃圾收集器管理。建立了乙個陣列或物件在堆中,堆公升肆棧可以也是乙個特殊的變數,讓棧中這個變清橡量的值等於陣列或物件在堆記憶體位址,棧中的變數是乙個陣列或物件的引用變數,它可用於程式後引用變數來訪問堆中的堆疊陣列或物件,引用變數是乙個陣列或吵正轎物件名稱。引用變數是在定義時在堆疊中分配的普通變數,並且在程式超出其範圍後會釋放引用的變數。

北京電腦培訓發現和陣列在堆中分配和物件本身,即使您的應用程式是使用新的陣列或物件宣告的乙個**塊,陣列和物件本身佔用記憶體不會被釋放,陣列和物件沒有引用變數指向它,成為一種浪費,不在使用,但仍佔據記憶體空間,其次是垃圾收集器在乙個不確定的時間。

堆和棧有什麼不同

4樓:懂視生活

堆與棧是開發人員必須要知道的兩個概念。在理解這兩個概念時,需要放到具體的場景下。因為不同場景下,與棧代表不同的含義。那麼,堆和棧的區別在**呢?一起來看看吧!

堆和棧的區別。

堆(heap)是電腦科學中一類特殊的資料結構的統稱。堆通常是乙個可以被看做一棵完全二叉樹的陣列物件。其性質主要有兩點:

1、堆中某個節點的值總是不大於或不小於其父節點的值;2、堆總是一棵完全二叉樹。

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

1、空間分配不同:棧由作業系統自動分配釋放,存放函式的引數值,區域性變數的值等,其操作方式類似於資料結構中的棧。而堆一般由程式設計師分配釋放,如果程式設計師不釋放,程式結束時可能由os**,分配方式倒是類似於連結串列。

2、快取方式不同:棧使用的是一級快取,通常被呼叫時處於儲存空間中,呼叫完畢立即釋放;而堆是存放在二級快取中,生命週期由虛擬機器的垃圾**演算法來決定。所以,呼叫這些物件的速度相對來得低一些。

3、資料結構不同:堆的資料結構可以被看成是一棵樹,如堆排序;而棧是一種先進後出的資料結構。

為什麼要把堆和棧區分?

5樓:python高手養成

在計算機中,堆和棧是兩種不同的記憶體管理方式,它們的使用場景和實現方法不同,有各自的優缺點。將堆和棧區分是為了便於處理不同種類的資料,下面詳細介紹:

1.堆的概念:堆是記憶體中肢汪一部分不連續的區域,由程式設計師手動分配和釋放記憶體,稱為動態記憶體分配。

在堆中分配記憶體使用的是malloc和free等函式。

堆的實現方法:堆的實現方法是由作業系統提供的,作業系統會分配一塊記憶體空間,多個程式共用這塊空間,每個程序或執行緒再在這塊空間上動態劃分出自己需要的記憶體。

日常生活中的例子。

比如,在你往電腦中安裝應用程式時,需要先在硬碟上建立檔案並在記憶體中分配記憶體空間,可以通過malloc等函式來從堆中分配空間,實現應用程式的執行。

2.棧的概念在函式呼叫時,該函式的引數和區域性變數會被分配到棧上,函式執行結束時,這些記憶體也隨之被釋放,稱為靜態記憶體分配。棧的記憶體分埋飢弊配和釋放都由編譯器自動完成。

棧的實現方法:棧是由編譯器自動管理的。當函式被呼叫時,會在棧上分配一塊空間儲存區域性變數的值及其它資訊。

其實現是通過指標來實現的,編譯器維護乙個指向當前彎族棧頂的指標,當資料被壓棧時,棧頂指標向下移動,當資料被彈出時,棧頂指標向上移動。

日常生活中的例子。

比如,當你開啟乙個函式時,棧就會分配乙個函式呼叫的記錄區,這個區域記錄了程式執行到該函式時的位置、引數和區域性變數等資訊。當函式執行結束時,這些記憶體也隨之被釋放。

為什麼要把堆和棧區分

雖然在概念上堆和棧區別很小,但是在實現方式和使用上有很多差異,它們適用於不同的場景。棧適合處理較小的資料,速度快,易於維護,但是容量有限,並且記憶體空間由編譯器自動分配和管理,對程式設計師來說無法自主控制。堆適合處理大小不固定的資料,容量較大,佔用比較多的記憶體空間,並且需要程式設計師手動分配和釋放記憶體。

所以,堆和棧都有缺點和優點,根據實際情況和需求選擇合適的資料儲存方式是非常必要和重要的。

希望我的對您有所幫助!

棧和堆的區別

6樓:

棧和堆是兩種不同的資料結構,它們在程式設計中有著不同的用途和特點。下面是它們之間的主要區別:1.

管理工作方式不同:棧是由作業系統自動管理的,程式設計師無需手動控制。堆的管理則是由程式設計師手動控制的。

2.空間大小不同:棧的空間大小是固定的,程式設計師無法控制。

堆的空間大小則可以根據實際野橡兆需求進行動態調整。3.申請釋放工作不同:

棧的元素頌租是按照後進先出的順序進行訪問的。堆的元素可以根據程式的需求進行訪問和釋放。4.

效率不同:由於棧的分配和釋放效率較低,因此在實際應用中,棧通常用於處理區域性變數和函式呼叫。堆則更多地用於分配較大的記憶體空間,如動態陣列、物件等。

5.記憶體碎片問題:由於堆是由程式設計師手動控制記憶體分配和釋放的,因此容易產生記憶體碎片問題,從而降低程式的效率。

棧則不會產生這個問題。總之,棧和堆是兩種不同的資料結構,它們在程式設計中有著不同的用途和特點。需要根據實際情況選擇合適的結構來解決問題。如鋒。

有誰知道《和蘭花在一起》的創作背景

這是曲目列表bai du 由於是手機登陸zhi 沒法子用 視屏給dao你核對是哪回一首曲子了答 十分抱歉 santorinikeys to imagination until the last momentthe rain must fall one man s dream within attra...

和情人在一起一年了和我在一起把叫成老婆名字為什麼

你這明顯是做小三了 破壞別人的家庭是不道德的行為 尤其是明知道別人已經成家了 還要強插一腳 不要說什麼愛的死去活來之類的 早點退出吧 這樣對你以後的生活也會好一 與情人在一起 他叫我的時候卻說出了他老婆的名字 這說明什麼 他心裡面老婆的位子第一。有時候口誤很正常 年紀大了或者忘情都有可能 情人不要看...

屬龍女和屬蛇男在一起怎麼樣,有誰知道屬龍女和屬蛇男到底是怎樣的婚姻?

蛇 龍你們是在不斷的碰撞中不斷推進的一對。兩個人都具有很高的智慧,都非常倔強,如果你們能將通力合作的精神進行到底,將會擁有一個開放性的家庭。蛇先生具有明顯的雙重性格,優柔寡斷,嫉妒心強,他對佔有慾產生的邏輯是因為愛所以恨。龍太太則坦誠大方,是易受染的性情中人。蛇先生儘管讚賞龍太太的積極的態度與大氣的...