Wince 中棧的大小

2021-08-25 19:01:59 字數 982 閱讀 3072

fun() ;

}在一函式中如上,申請了100k棧記憶體,出現的問題是只要一呼叫該函式,主線程馬上終止並退出。一開始就想到了棧空間不足的可能,重啟手機,再除錯,問題依舊,google了win ce記憶體,找到了答案。

棧是windows ce記憶體型別中最容易使用的(自行管理)。在windows ce中的棧像其它

作業系統

一樣,是被引用函式的臨時變數儲存區。作業系統也用棧來儲存函式的返回位址和在異常處理中微處理器暫存器的狀態。

在系統中,windows ce給每個執行緒乙個分離的棧。預設情況下,系統中每個棧大小最大被限制為58kb。在乙個程序中,每個分離的執行緒可以增加棧的大小直到58-kb的限制。

這個限制使得要我們要知道windows ce如何對棧管理。當執行緒被建立的時候,windows ce保留乙個64-kb的區域給每個執行緒的棧。棧增加時,提交虛擬記憶體頁是從上至下的。當棧減小時,系統將處於的低記憶體環境(low-memory),會**在棧下面未使用但是仍然被提交的頁。58kb的限制**於64-kb的區域減去用來防止棧的上溢和下溢的頁面數量。

當乙個應用程式建立乙個新的執行緒時,棧的最大尺寸可以通過建立執行緒時createthread呼叫來指定。應用程式的主線程的棧大小可以通過應用程式被連線時的聯結器開關(linker switch)來指定。同樣會有一些頁用作防護,但是棧的大小可以指定至1mb。注意,這個指定大小同樣會被用作所有分離執行緒棧的預設棧大小。那就是說,如果你指定主棧為128kb,程式中所有其他的執行緒棧大小也限制為128kb,除非在用createthread建立執行緒時指定乙個不同的大小。

當你計畫如何在應用程式中使用棧的時候,另乙個要值得考慮事情的是。當應用程式呼叫乙個需要棧空間的函式時,windows ce會試圖立即提交滿足要求的當前棧之下的頁面,如果沒有物理ram可用,需要棧空間的執行緒將會暫時停止。如果請求在短時間內得不到允許,可能產生乙個異常。但是如果系統不發生異常的化,windows ce將會最大限度釋放請求的頁。我將簡短地說明一下低記憶體環境,但現在你只需要記住在的記憶體環境中不要嘗試使用大量的棧空間。

Wince 中棧的大小

fun 在一函式中如上,申請了100k棧記憶體,出現的問題是只要一呼叫該函式,主線程馬上終止並退出。一開始就想到了棧空間不足的可能,重啟手機,再除錯,問題依舊,google了win ce記憶體,找到了答案。棧是windows ce記憶體型別中最容易使用的 自行管理 在windows ce中的棧像其它...

程序棧大小 與 執行緒棧大小

結論 1.程序的棧大小是在程序執行的時刻才能指定的,即不是在編譯的時刻決定,也不是鏈結的時刻決定,否則就不會有實驗5的結果 2.程序的棧大小是隨機確定的至少比執行緒的棧要大,但是不到執行緒棧大小的2倍 3.執行緒棧的大小是固定的,也就是ulimit a顯示的值 實驗 我在fc3,gcc3.4.2環境...

VC改變棧的大小

最近程式設計時編寫了乙個遞迴程式,由於遞迴太深,造成棧溢位,於是想到要增加棧空間大小。以下是轉來的改變vc棧大小的方法 記憶體的讀取速度顯然較硬碟要快的多,當做程式時遇到大規模資料的頻繁訪問的時候,開闢記憶體空間就更顯得重要了!一般來說,我們所用的記憶體有棧和堆之分,其它的我們很少控制,棧的速度快,...