распределение памяти в небольших устройствах памяти - PullRequest
2 голосов
/ 12 декабря 2008

Некоторые системы, такие как Symbian, настаивают, чтобы при выделении
люди использовали кучу вместо стека большие объекты (например, имена путей, которые могут быть больше 512 байт). Есть ли какая-то конкретная причина для этого?

Ответы [ 5 ]

3 голосов
/ 11 февраля 2009

Большинство устройств Symbian поставляются с MMU, но до недавнего времени не поддерживали пейджинг. Это означает, что физическое ОЗУ выделяется для каждого запущенного процесса. Каждый поток в Symbian имеет (обычно) фиксированный стек по 8 КБ. Если у каждого потока есть стек, то увеличение размера этого стека с 8 КБ, скажем до 32 КБ, окажет большое влияние на требования к памяти устройства.

Куча глобальная. Увеличение его размера, если вам нужно это сделать, оказывает гораздо меньшее влияние. Таким образом, в Symbian стек предназначен только для небольших элементов данных - выделяйте большие объекты из кучи.

3 голосов
/ 12 декабря 2008

Как правило, размер стека на встроенном устройстве достаточно мал, т. Е. Размер стека по умолчанию в Symbian составляет 8 КБ.

Если вы считаете, что максимальная длина имени файла составляет 256 байт, но вдвое больше, чем для юникода, это уже 512 байт (1/16 всего стека) только для 1 имени файла. Таким образом, вы можете себе представить, что довольно легко использовать стек, если вы не будете осторожны.

2 голосов
/ 12 декабря 2008

Встроенные устройства часто имеют стек фиксированного размера. Поскольку при вызове подпрограммы в C нужно всего лишь поместить несколько слов в стек, может хватить нескольких сотен байтов (если вы избегаете рекурсивных вызовов функций).

1 голос
/ 12 декабря 2008

Большинство встроенных устройств не поставляются с блоком управления памятью, поэтому у ОС нет возможности автоматически наращивать пространство стека, прозрачно для программиста. Даже предполагая наращиваемый стек, вам придется управлять им самостоятельно, что не лучше, чем выделение кучи, и в первую очередь лишает цели использование стека.

0 голосов
/ 12 декабря 2008

Стек для встроенных устройств обычно находится в очень небольшом количестве высокоскоростной памяти. Если вы размещаете большие объекты в стеке на таком устройстве, вы можете столкнуться с переполнением стека .

...