Можно ли хранить данные в программном пространстве вместо динамической памяти?

Я объявляю массив на верхнем уровне следующим образом:

constexpr байт a[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; // какие бы данные

Я ссылаюсь на массив таким образом, чтобы он не был оптимизирован сразу. При компиляции этой программы из Arduino IDE она сообщает мне, что использует 1474 байта пространства для хранения программ и 194 байта динамической памяти. Любопытно, что если мой массив вдвое больше (20 элементов), то используется еще 10 байт как программного хранилища, так и динамической памяти (1484 и 204 соответственно).

Могу ли я каким-то образом убедить компилятор хранить все это только в программном пространстве хранения? Какие-либо квалификаторы или параметры я должен использовать вместо этого? (и вообще, зачем ему занимать место в обоих пространствах памяти?!)

Я использую arduino uno.

, 👍1

Обсуждение

Вы должны использовать PROGMEM или более новые AVR, такие как Atmega4809, с "плоской" моделью памяти (все различные типы памяти отображаются в одно и то же пространство памяти и доступны по одним и тем же указателям)., @KIIV

https://www.arduino.cc/reference/en/language/variables/utilities/progmem/, @Juraj

Это больше похоже на ответы, чем на комментарии, поэтому, если вы думаете, что это то же самое, опубликуйте это как таковое, чтобы я мог это принять; progmem не является бесшовным, но он выполняет свою работу, @adrianton3