棧最大存儲
❶ 64K位元組SRAM,堆,棧最大可以設多大值
:嘿嘿 俺來幫你解答 1 一個棧段最大可以設置64K 即地址空間為 0000H~FFFFH. 2 原因是每一個堆棧段的偏移地址(即有效地址)是16位的 其最小值為0000H 最大值為FFFFH. 由0000H~FFFFH整個空間 有64K個單元。
❷ C++給個求棧最大內存的程序
棧區內存,由編譯器自動分配釋放 ,存放函數的參數值,局部變數的值等。其操作方式類似於數據結構中的棧。訪問順序遵循先進後出原則。棧stack:是程序啟動時候由程序留出的工作內存區 比如程序的局部變數,函數調用等都是從棧中獲取,這個內存在需要的時候分配,不需要就釋放 堆heap:是計算機空餘的物理內存和硬碟空餘空間的和。但是它的獲取不是自動的了,相比從棧中分配內存要慢些。使用棧就象我們去飯館里吃飯,只管點菜(發出申請)、付錢、和吃(使用),吃飽了就走,不必理會切菜、洗菜等准備工作和洗碗、刷鍋等掃尾工作,他的好處是快捷,但是自由度小。 使用堆就象是自己動手做喜歡吃的菜餚,比較麻煩,但是比較符合自己的口味,而且自由度大。關於堆棧的更多信息如下:============================= 堆:順序隨意棧:先進後出堆和棧的區別一、預備知識—程序的內存分配一個由c/C++編譯的程序佔用的內存分為以下幾個部分1、棧區(stack)— 由編譯器自動分配釋放 ,存放函數的參數值,局部變數的值等。其操作方式類似於數據結構中的棧2、堆區(heap) — 一般由程序員分配釋放, 若程序員不釋放,程序結束時可能由OS回收 。注意它與數據結構中的堆是兩回事,分配方式倒是類似於鏈表,呵呵。3、全局區(靜態區)(static)—,全局變數和靜態變數的存儲是放在一塊的,初始化的全局變數和靜態變數在一塊區域, 未初始化的全局變數和未初始化的靜態變數在相鄰的另一塊區域。 - 程序結束後有系統釋放4、文字常量區 —常量字元串就是放在這里的。 程序結束後由系統釋放 5、程序代碼區—存放函數體的二進制代碼。二、例子程序這是一個前輩寫的,非常詳細//main.cpp int a = 0; 全局初始化區char *p1; 全局未初始化區main() 二、堆和棧的理論知識2.1申請方式stack:由系統自動分配。 例如,聲明在函數中一個局部變數 int b; 系統自動在棧中為b開辟空間heap:需要程序員自己申請,並指明大小,在c中malloc函數如p1 = (char *)malloc(10);在C++中用new運算符如p2 = (char *)malloc(10);但是注意p1、p2本身是在棧中的2.2申請後系統的響應棧:只要棧的剩餘空間大於所申請空間,系統將為程序提供內存,否則將報異常提示棧溢出。堆:首先應該知道操作系統有一個記錄空閑內存地址的鏈表,當系統收到程序的申請時,會遍歷該鏈表,尋找第一個空間大於所申請空間的堆結點,然後將該結點從空閑結點鏈表中刪除,並將該結點的空間分配給程序,另外,對於大多數系統,會在這塊內存空間中的首地址處記錄本次分配的大小,這樣,代碼中的delete語句才能正確的釋放本內存空間。另外,由於找到的堆結點的大小不一定正好等於申請的大小,系統會自動的將多餘的那部分重新放入空閑鏈表中。 2.3申請大小的限制棧:在Windows下,棧是向低地址擴展的數據結構,是一塊連續的內存的區域。這句話的意思是棧頂的地址和棧的最大容量是系統預先規定好的,在 WINDOWS下,棧的大小是2M(也有的說是1M,總之是一個編譯時就確定的常數),如果申請的空間超過棧的剩餘空間時,將提示overflow。因此,能從棧獲得的空間較小。堆:堆是向高地址擴展的數據結構,是不連續的內存區域。這是由於系統是用鏈表來存儲的空閑內存地址的,自然是不連續的,而鏈表的遍歷方向是由低地址向高地址。堆的大小受限於計算機系統中有效的虛擬內存。由此可見,堆獲得的空間比較靈活,也比較大。 2.4申請效率的比較:棧由系統自動分配,速度較快。但程序員是無法控制的。堆是由new分配的內存,一般速度比較慢,而且容易產生內存碎片,不過用起來最方便. 另外,在WINDOWS下,最好的方式是用VirtualAlloc分配內存,他不是在堆,也不是在棧是直接在進程的地址空間中保留一快內存,雖然用起來最不方便。但是速度快,也最靈活 2.5堆和棧中的存儲內容棧: 在函數調用時,第一個進棧的是主函數中後的下一條指令(函數調用語句的下一條可執行語句)的地址,然後是函數的各個參數,在大多數的C編譯器中,參數是由右往左入棧的,然後是函數中的局部變數。注意靜態變數是不入棧的。當本次函數調用結束後,局部變數
❸ 一般的計算機內存中堆棧區的容量有多大
你的問題比較籠統,堆和棧是兩個不同的概念,在內存中堆的大小受限於
計算機系統
中有效的
虛擬內存
,而棧的最大容量是系統預先規定好的,其獲得的空間要小於「堆」
❹ 在8086中定義一個堆棧段其空間最大為多大
由於SP的變化范圍為0000H~FFFFH,(H表示16進制數)
其中需要注意的一點是,當棧滿的時候,SP=0000H (由於8086壓棧是由高地址端(FFFFH)到低地址端(0000H),SP不斷減小),繼續壓棧,SP溢出(不會影響SS),將會讓SP從FFFFH端向0000H端環繞,能夠覆蓋之前的值,也就是絕對地址最大范圍也就和SP的最大范圍相同
SP可以指向的每個單元大小對應1Byte(這個單元大小和SP變化范圍無關),由SP的變化范圍可知SP可表示為16位二進制數,最大容量應該為
2^16Byte=64KB
或者根據共有FFFFH+1個單元,
(FFFFH-0000H+1)*1Bit=10000H(Byte)
=2^16(Byte)
=64KB
絕對地址計算方法(其實和CS:IP的計算方法相同):
StackAddress=StackSegment*16+StackPointer;
其中*16可以表示為二進制數向左移動四位,對應16進制左移一位(加0)就可以了
StackAddress=100F0+01A1
=10291(十六進制)
❺ java 每個函數的棧空間大小是
在Java程序運行時,各個棧空間大小如下:
(1) 寄存器。最快的保存區域,位於處理器內部,數量十分有限,它是根據需要由編譯器分配。我們對此沒有直接的控制權.
(2) 棧(stack)。駐留於常規RAM(隨機訪問存儲器)區域,這是一種特別快、特別有效的數據保存方式,僅次於寄存器。創建程序時,Java編譯器必須准確地知道堆棧內保存的所有數據的「長度」以及「存在時間」。這失去了一定的靈活性,因此對象句柄是存放在棧中,但Java對象並不放到其中。
(3) 堆(heap)。保存了Java對象。和棧不同,它最吸引人的地方在於編譯器不必知道要從堆里分配多少存儲空間,也不必知道存儲的數據要在堆里停留多長的時間。因此,用堆保存數據時會得到更大的靈活性。要求創建一個對象時,只需用new命令編制相關的代碼即可。執行這些代碼時,會在堆里自動進行數據的保存。當然,為達到這種靈活性,必然會付出一定的代價:在堆里分配存儲空間時會花掉更長的時間!
(4) 靜態存儲。這兒的「靜態」(Static)是指「位於固定位置」(盡管也在RAM里)。程序運行期間,靜態存儲的數據將隨時等候調用。可用static關鍵字指出一個對象的特定元素是靜態的。但Java對象本身永遠都不會置入靜態存儲空間。
(5) 常數存儲。常數值通常直接置於程序代碼內部。這樣做是安全的,因為它們永遠都不會改變。有的常數需要嚴格地保護,所以可考慮將它們置入只讀存儲器(ROM)。
(6) 非RAM存儲。數據完全獨立於一個程序之外,則程序不運行時仍可存在,並在程序的控制范圍之外。
❻ 8051單片機堆棧的最大容量是多少
最大容量是08H~FFH。也就是說出了工作寄存器,其餘都可以使用。
❼ 89c51單片機堆棧的容量不能超過多少位元組
89C51內部只有低128位元組,范圍是00~7FH,128B的數據RAM區,包括有工作寄存器組區、可直接位定址區和數據緩沖區。各區域的特性如下: (1) 00H~1FH為工作寄存器組區。(2) 20H~2FH為可位定址區域(3)30H~7FH為堆棧、數據緩沖區。30-7FH有80個位元組單元,可以採用位元組位元組定址的方法訪問堆棧區及堆棧指示區 堆棧是在片內RAM中數據先進後出的一個存儲區域。堆棧指針SP是存放當前堆棧棧頂所對應的存儲單元地址的一個8位寄存器。系統復位後SP為07H,而07H一般是寄存器區,所以,一般可以通過對SP賦值,可以使堆棧區設定在RAM中的某一區域,但堆棧的深度以不超過片內RAM區空間為限❽ 一個進程的堆和棧有多大
棧是線程的,不是進程的
是一個進程一個堆,一個線程一個棧嗎
堆≈虛擬內存大小-1GB
棧通常為4MB
下面是一些說明文件:
Visual C++ 編譯器選項
/F(設置堆棧大小)
請參見 發送反饋意見
設置程序堆棧大小(以位元組為單位)。
/F[ ]number
參數
number
堆棧大小(以位元組為單位)。
備注
如果不使用此選項,堆棧大小默認為 1 MB。number 參數可以用十進制或 C 語言表示法表示。參數的范圍可以在 1 到鏈接器接受的最大堆棧大小之間。鏈接器將指定值向上舍入為最接近的 4 個位元組。/F 和 number 之間的空格可選的。
❾ 一個棧段最大可以設置多大為什麼呢
嘿嘿 俺來幫你解答
1 一個棧段最大可以設置64K 即地址空間為 0000H~FFFFH.
2 原因是每一個堆棧段的偏移地址(即有效地址)是16位的 其最小值為0000H
最大值為FFFFH.
由0000H~FFFFH整個空間 有64K個單元。
呵呵 可惜沒有加分呀 就選滿意回答吧
❿ 已知棧的最大容量為4,如果進棧序列為1, 2, 3, 4, 5, 6,並且進棧和出棧可以穿插進行,則可能出現的出棧
C、3, 2, 5, 4, 1, 6。
1 2 3進棧->3 2出棧->4 5進棧->5 4 1出棧->6進棧->6出棧
定義stack的簡單代碼:
stack<int> sta;
入棧:sta.push(x);
出棧:sta.pop();
判斷棧的大小: sta.size();
判斷棧是否為空:sta.empty();
(10)棧最大存儲擴展閱讀:
棧是允許在同一端進行插入和刪除操作的特殊線性表。允許進行插入和刪除操作的一端稱為棧頂,另一端為棧底;棧底固定,而棧頂浮動;棧中元素個數為零時稱為空棧。插入一般稱為進棧,刪除則稱為退棧。棧也稱為先進後出表。
棧在程序的運行中有著舉足輕重的作用。最重要的是棧保存了一個函數調用時所需要的維護信息,這常常稱之為堆棧幀或者活動記錄。