小内存设备中的内存分配

时间:2008-12-12 15:56:52

标签: memory symbian

某些系统(如Symbian)在分配时坚持让人们使用堆而不是堆栈 大对象(例如路径名,可能超过512个字节)。这有什么特别的原因吗?

5 个答案:

答案 0 :(得分:3)

通常,嵌入式设备上的堆栈固定为非常小,即8K是Symbian上的默认堆栈大小。

如果你认为最大长度文件名是256字节,但是对于unicode来说已经加倍了,只有1个文件名已经是512字节(整个堆栈的1/16)。所以你可以想象,如果你不小心的话,很容易用掉堆栈。

答案 1 :(得分:3)

大多数Symbian设备都配有MMU,但直到最近,才支持分页。这意味着物理RAM将为每个正在运行的进程提交。 Symbian上的每个线程(通常)都有一个固定的8KB堆栈。如果每个线程都有一个堆栈,那么将该堆栈的大小从8KB增加到32KB会对设备的内存需求产生很大影响。

堆是全局的。如果需要,增加其大小的影响要小得多。因此,在Symbian上,堆栈仅用于小数据项 - 从堆中分配更大的数据项。

答案 2 :(得分:2)

嵌入式设备通常具有固定大小的堆栈。由于C中的子程序调用只需要将几个字压入堆栈,因此几百字节就足够了(如果你避免使用递归函数调用)。

答案 3 :(得分:1)

大多数嵌入式设备没有内存管理单元,因此操作系统无法自动增加堆栈空间,对程序员来说是透明的。即使假设一个可增长的堆栈,你也必须自己管理它,这并不比堆分配更好,并且首先要破坏使用堆栈的目的。

答案 4 :(得分:0)

嵌入式设备的堆栈通常驻留在极少量的高速内存中。如果在此类设备上的堆栈上分配大对象,则可能面临堆栈溢出