Сколько стоит 32 КБ скомпилированного кода

Я планирую использовать программируемую плату Arduino . У них достаточно ограниченная флэш-память в диапазоне от 16 до 128 кБ для хранения скомпилированного кода C или C ++.

Есть ли способы оценить , какой (стандартный) код он будет представлять?

Полагаю, это очень расплывчато, но я ищу только на порядок.

8
задан Klaus 22 August 2010 в 21:37
поделиться

4 ответа

Вы действительно не можете сказать там. Длина некомпилированного кода мало связана с длиной скомпилированного кода. Например:

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>

int main()
{
  std::vector<std::string> strings;
  strings.push_back("Hello");
  strings.push_back("World");
  std::sort(strings.begin(), strings.end());
  std::copy(strings.begin(), strings.end(), std::ostream_iterator<std::string>(std::cout, ""));
}

vs

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>

int main()
{
  std::vector<std::string> strings;
  strings.push_back("Hello");
  strings.push_back("World");
  for ( int idx = 0; idx < strings.size(); idx++ )
    std::cout << strings[idx];
}

Оба имеют одинаковое количество строк и производят одинаковый вывод, но первый пример включает создание экземпляра std :: sort, который, вероятно, на порядок больше кода, чем остальные кода здесь.

Если вам абсолютно необходимо подсчитать количество байтов, использованных в программе, используйте ассемблер.

3
ответ дан 5 December 2019 в 12:06
поделиться

Это довольно много для достаточно сложной программы, но вы начнете сталкиваться с пределом, если хотите, чтобы у нее было много различных функций. Кроме того, если вы хотите хранить довольно много статических строк и данных, они могут быстро их съесть. Но для встраиваемых приложений 32 КБ - это приличный объем. Как правило, в первую очередь у вас возникают проблемы с оперативной памятью!

Кроме того, довольно часто компиляторы C ++ для встраиваемых систем намного хуже компиляторов C. То есть они нигде не так хороши, как компиляторы C ++ для обычных настольных ОС (с точки зрения создания эффективного машинного кода для целевой платформы).

1
ответ дан 5 December 2019 в 12:06
поделиться

Загрузите IDE arduino и «проверьте» часть существующего кода или просмотрите образцы эскизов. Он скажет вам, сколько байтов в этом коде, что даст вам представление о том, сколько еще байтов вы можете уместить на данном устройстве. Выбрав пару примеров наугад, пример веб-сервера имеет размер 5816 байт, а LCD hello world - 2616 байт. Оба используют внешние библиотеки.

2
ответ дан 5 December 2019 в 12:06
поделиться

В системе Linux вы можете поэкспериментировать со статическими скомпилированными примерами программ. Например.

$ size `which busybox `
text            data    bss     dec     hex filename
1830468    4448   25650 1860566  1c63d6 /bin/busybox

Размеры указаны в байтах. Этот вывод не зависит от формата исполняемого файла, поскольку размеры различных разделов внутри формата файла. Текстовая секция содержит машинный код и const stufff. Раздел данных содержит данные для статической инициализации переменных. Размер bss - это размер неинициализированных данных - конечно, неинициализированные данные не нужно хранить в исполняемом файле.)

Что ж, busybox содержит множество функций (как и все обычные команды оболочки, оболочка и т. д.).

Если вы связываете собственные примеры с помощью gcc -static , имейте в виду, что используемая вами библиотека libc может значительно увеличить размер программы и что использование встроенной библиотеки может быть намного более экономичным.

Чтобы проверить это, вы можете проверить diet-libc или uclibc и дать ссылку на него. На самом деле, busybox обычно связан с uclibc.

Обратите внимание, что размеры, которые вы получаете таким образом, дают вам только порядок величины . Например, ваша рабочая станция, вероятно, использует другую архитектуру ЦП, чем плата Arduino, и машинный код другой архитектуры может более или менее отличаться по размеру (из-за размеров операндов, доступных инструкций, кодировки кода операции и т. Д.).

Продолжая приблизительные рассуждения , busybox содержит примерно 309 инструментов (включая демон ftp и тому подобное), то есть средний размер кода инструмента busybox примерно равен 5к.

0
ответ дан 5 December 2019 в 12:06
поделиться