Показаны различия между двумя версиями страницы.
ob:o7:memory [2016/08/24 19:05] иван_денисов |
ob:o7:memory [2020/10/29 07:08] |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
- | ====== Особенности работы с памятью ====== | ||
- | При выполнении команды **O7ARMv{6, | ||
- | |||
- | Доступная память RAM используется под следующие ресурсы: | ||
- | * heap (heapLim - heapOrg) | ||
- | * stack | ||
- | * global variables | ||
- | * pointers table, strings, modules table | ||
- | |||
- | Heap (куча) используется только при динамическом выделении памяти через команду NEW, и она заполняется снизу вверх. (Перед вызовом команды NEW для указателя, | ||
- | |||
- | Стек заполняет выделенную под него память сверху вниз. И когда этот объем полностью заполняется, | ||
- | |||
- | Размер памяти, | ||
- | |||
- | Чтобы проверить заполнение стека, необходимо его вычислить исходя из положения начала и его текущего положения: | ||
- | |||
- | SYSTEM.GET(SYSTEM.REG(6), | ||
- | SYSTEM.GET(SYSTEM.REG(13), | ||
- | stkLen := stkOrg - stkPos; | ||
- | |||
- | Так возможно контролировать при отладка, | ||
- | |||
- | Переполнение стека возможно сделать и более простым путем, сравнив **stkPos** с **MicroKernel0.heapLim**. Если он меньше, |