Показаны различия между двумя версиями страницы.
ob:o7:memory [2018/11/30 01:13] 127.0.0.1 внешнее изменение |
ob:o7:memory [2020/10/29 07:08] |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
- | ====== Особенности работы с памятью ====== | ||
- | При выполнении команды **O7ARMv{6, | ||
- | |||
- | Доступная память RAM используется под следующие ресурсы: | ||
- | * куча; | ||
- | * стек; | ||
- | * глобальные переменные; | ||
- | * таблица указателей, | ||
- | |||
- | Куча используется только при динамическом выделении памяти через команду NEW, и она заполняется снизу вверх. Для сборки мусора в куче надо вызывать команду **MicroGC0.Collect**. Количество выделенной динамической памяти доступно в переменной **MicroKernel0.allocated**, | ||
- | |||
- | Стек заполняет выделенную под него память сверху вниз. И когда этот объем полностью заполняется, | ||
- | |||
- | Размер памяти, | ||
- | |||
- | Степень заполнение стека возможно вычислить, | ||
- | |||
- | SYSTEM.GET(SYSTEM.REG(MT), | ||
- | SYSTEM.GET(SYSTEM.REG(SP), | ||
- | stkLen := stkOrg - stkPos; | ||
- | |||
- | Так возможно контролировать при отладке, | ||
- | |||
- | Переполнение стека возможно обнаружить и более простым путем, сравнив **stkPos** с **MicroKernel0.heapLim**. Если он меньше, | ||
- | |||
- | ---- | ||
- | |||
- | Автор заметки: |