2013-08-13 3 views
3

Я написал несколько простых алгоритмов дерева/графа, но быстро столкнулся с множеством исключений StackOverflowError с некоторыми довольно маленькими данными. Оказывается, стек по умолчанию составляет 8 Кбайт на моем Samsung Galaxy S3, который имеет 2 ГБ оперативной памяти. Мой компьютер 10 лет назад имел 1 МБ стек. Аппарат Linux, который я использую сейчас, имеет 4 ГБ оперативной памяти. ОЗУ моего телефона составляет лишь половину от объема оперативной памяти моего компьютера, но стек телефона в 1000 раз меньше. Зачем?Почему стек вызовов в Android 8KB?

Какова фактическая техническая причина, по которой разработчикам Android пришлось ограничивать стек гораздо больше, чем другие операционные системы? Например, это связано с тем, что некоторые устройства Android имеют небольшой объем оперативной памяти, например, 1 МБ или 10 МБ? Я не рассматривал диапазон устройств, но мне трудно поверить, что любое устройство будет настолько маленьким.

+0

Решение архитектурного дизайна от Samsung/Google? – Renan

+0

Опубликовать весь logcat. –

+0

Потому что это размер стека по умолчанию (и IIRC - это версия и/или устройство). –

ответ

0

Просто создайте Thread с размером стека, который вы хотите, и запустите свой код.

Я считаю, что по умолчанию один из 8KB связан с тем, что он, скорее всего, выделен на кучу, а 32-разрядная архитектура не имеет большого количества VRAM, чтобы тратить на нее (с разделом памяти на 2 ГБ это всего лишь 2 ГБ на каждый процесс). Выделение большого стека навсегда вывело бы его из доступного VRAM процесса. Это отличается от традиционных нативных процессов, где стек растет сверху донизу, а куча растет снизу вверх.

+0

Он установлен в прошивке. Вы можете изменить это, если хотите, но между модификацией Android и миганием телефона вам лучше всего реорганизовать свой код. – Renan

Смежные вопросы