3

我写了一些简单的树/图算法,但很快就遇到了StackOverflowError一些非常小的数据异常。事实证明,在我的三星 Galaxy S3 上,堆栈默认为 8KB,它有 2GB 的 RAM。10 年前我的电脑有一个 1MB 的堆栈。我现在使用的 Linux 机器有 4GB RAM。我手机的内存只有我电脑内存的一半,但我手机的堆栈却小了 1000 多倍。为什么?

Android 的开发人员必须比其他操作系统更多地限制堆栈的实际技术原因是什么?例如,是因为某些 Android 设备的 RAM 很小,例如 1MB 或 10MB?我没有调查过设备的范围,但我发现很难相信任何设备会如此之小。

4

1 回答 1

0

只需Thread使用您想要的堆栈大小创建一个并在其中运行您的代码。

我相信默认的一个8KB是由于它很可能是在堆上分配的,并且 32 位架构没有太多的 VRAM 可以浪费在上面(使用 2GB 内存拆分,每个进程只有 2GB可用的)。分配一个大堆栈将永久地将其从进程的可用 VRAM 中取出。这不同于传统的原生进程,栈从上到下增长,而堆从下到上增长。

于 2013-08-13T20:55:09.163 回答