Movesense RAM, распределение переменных

С 1.6.2 почему я могу построить код с

byte data[100000000];

Если я правильно помню с предыдущими версиями, я получил ошибку, поскольку есть ограниченная RAM. Я предполагаю, что более правильным способом было бы что-то

byte* data=new byte[10000];
if (data!=NULL) ...

Извините за основной вопрос C/C++

1 ответ

Если вы добавите этот первый код в функцию или метод, он будет выделен из стека во время выполнения. Вот почему компоновщик не предупредит вас об этом. Если вы добавите его как глобальную переменную (вне методов и классов), произойдет ошибка. Хотя оператор "new" иногда работает в Movesense, это не рекомендуемый способ выделения памяти. Процедуры выделения памяти объявлены в файле movesense.h:

void* memalloc(size_t size);
void* memcalloc(size_t size);
void memfree(void* ptr);

Однако есть более простой способ. Поскольку пользователи LaunchableModules выделяются из Movesense HEAP, вы можете просто объявить любые буферы фиксированного размера, которые вам нужны, в качестве членов класса, и они будут автоматически распределены при создании экземпляра LaunchableModule. Несмотря на то, что перед добавлением больших выделений буфера в модуль рекомендуется выполнить запрос свободной памяти во время работы датчика, чтобы не допустить повторного сброса датчика, который постоянно сбрасывается при каждой попытке загрузки, поскольку у него заканчивается HEAP.

Другие вопросы по тегам