ARCAdaptor

Всё в твоих руках

Новости

Оптимизируй это!

Борьба за объем - каждодневная реальность любого разработчика, поскольку любой микроконтроллер имеет конечное и весьма скромное количество памяти на борту.

Ниже пример кода, на котором явно видны чудеса GCC (а именно этот компилятор используется в среде разработки Arduino). 

Итак, приступим.

Рассмотрим первый скетч:

 

String string1="hello";
String string2="world";
byte stub=0;

void setup()
{
}
void loop()
{
  
 if (string1 != string2)
 {
   stub =1;
 } 
}

А теперь посмотрим, что будет после компиляции :

Binary sketch size: 2,016 bytes

Немного изменим код:

 

String string1="hello";
String string2="world";
byte stub=0;

void setup()
{
}
void loop()
{
 if ( (string1.length() != string2.length()) || (!string1.startsWith(string2) ))
 {
   stub =1;
 } 
}

Binary sketch size: 2,010 bytes

Шесть байт экономии. А если представить что аналогичных операций несколько - набегает изрядная цифра.

Теперь рассмотрим пример с равенством:

 

String string1="hello";
String string2="world";
byte stub=0;

void setup()
{
}
void loop()
{

  if (string1 == string2)
  {
    stub =0;
  }
 
}

Binary sketch size: 2,014 bytes

А теперь измененный вариант:

String string1="hello";
String string2="world";
byte stub=0;

void setup()
{
}
void loop()
{
  if ( (string1.length() == string2.length()) && (string1.startsWith(string2) ))
  {
    stub =0;
  }
}

Binary sketch size: 2,008 bytes

Разница опять 6 байт. 

Это пример оптимизации "на ходу". Конечно, новая версия компилятора вполне может внести коррективы. Основная мысль - если операцию можно сделать другим способом - обязательно попробуйте его. Быть может, он окажется лучше очевидного :-)

 

<< Вернуться на предыдущую страницу

comments powered by Disqus