2

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

4

5 回答 5

3

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

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

于 2008-12-12T16:28:21.040 回答
3

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

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

于 2009-02-11T08:12:48.900 回答
2

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

于 2008-12-12T16:05:15.407 回答
1

大多数嵌入式设备没有内存管理单元,因此操作系统无法自动增加堆栈空间,对程序员透明。即使假设堆栈是可增长的,您也必须自己管理它,这并不比堆分配好,而且一开始就违背了使用堆栈的目的。

于 2008-12-12T18:10:28.697 回答
0

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

于 2008-12-12T16:04:54.363 回答