… бедных программистов с помощью компилятора.
Маленькая программка на С.
Внутри код
uint8_t i[]="123456789012345678901234567890";
Или +30 байт.
Результат:
Program space        used    F9h (   249) of  2000h words   (  3.0%)
Data space           used    49h (    73) of   200h bytes   ( 14.3%)
А теперь добавим const перед i, показывая компилятору, что неплохо бы переменную перенести в “программную” часть.
Program space        used    D9h (   217) of  2000h words   (  2.6%)
Data space           used     Bh (    11) of   200h bytes   (  2.1%)
Хм. 249-217=32 байт освободили в программной части и 73-11=62 (!) байта в области данных
Говоря другими словами, родной компилятор XC8, если не сказать другого, при любом использовании переменной хранит 2 копии переменной в программной памяти и 2 копии в области данных. Сказать, что я офигел мрачно, значит ничего не сказать.
После этого становится понятно, откуда компилятор берет ресурсы для оптимизации и гордо сообщает при любом удобном случае Running this compiler in PRO mode, with Omniscient Code Generation enabled, produces code which is typically 40% smaller than in Free mode.
(Чуть позже) решил перепроверить, а то вдруг всякие библиотеки/типа навязались
Сделал пустой проект с одним файлом для PIC16F1503.
void main(void) {
    char i[30]="123456789012345678901234567890";
    int q;
    q=i[2];
}
Ничего больше, ни инклюдов, ни библиотек, ни инициализаций.
Program space        used    4Ah (    74) of   800h words   (  3.6%)
Data space           used    42h (    66) of    80h bytes   ( 51.6%)
добавляем const
Program space        used    2Fh (    47) of   800h words   (  2.3%)
Data space           used     6h (     6) of    80h bytes   (  4.7%)
Хорошие, добрые и отзывчивые люди!
Всё правильно он днлать. Надо мат.часть тщательнее изучать. 🙂
Всё правильно он днлать. Надо мат.часть тщательнее изучать. 🙂