2008-12-12 66 views

回答

1

大多數嵌入式設備都沒有內存管理單元,所以操作系統無法自動增加堆棧空間,這對程序員來說是透明的。即使假設一個可增長的堆棧,你將不得不自己管理它,這並不比堆分配好,並且首先破壞了使用堆棧的目的。

0

嵌入式設備的堆棧通常駐留在非常少量的高速內存中。如果您在此類設備上的堆棧上分配大型對象,則可能面臨堆棧溢出

+0

你的意思是說棧一般分配在緩存中? – chappar 2008-12-12 17:14:43

2

嵌入式設備通常具有固定大小的堆棧。由於C中的子程序調用僅需將幾個字壓入堆棧,因此只需幾百字節即可(如果避免遞歸函數調用)。

3

通常,嵌入式設備上的堆棧固定爲非常小,即8K是Symbian上的默認堆棧大小。

如果您考慮最大長度文件名爲256bytes,但是對於512字節的Unicode已經是您的整個堆棧的1/16(僅用於1個文件名)。所以你可以想象,如果你不小心使用堆棧很容易。

3

大多數Symbian設備都帶有MMU,但直到最近才支持分頁功能。這意味着每個正在運行的進程都會提交物理RAM。 Symbian上的每個線程都有(通常)固定的8KB堆棧。如果每個線程都有一個堆棧,那麼將這個堆棧的大小從8KB增加到32KB就會對設備的內存要求產生很大的影響。

堆是全局的。如果你需要這樣做,增加它的大小,影響就會小得多。所以,在Symbian上,堆棧僅用於小數據項 - 從堆中分配較大的數據項。