Paso 1: compiladores
Una búsqueda en internet le dirá mucho más de lo que pueda acerca de los compiladores, que es aquí sólo un breve resumen.
Los bocetos de Arduino están escritos en un lenguaje de alto nivel como C++ o C pero el microcontrolador ejecuta las instrucciones de código máquina, por lo tanto la tarea del compilador es convertir (traducir viz) el código legible humano en una secuencia de instrucciones que el microprocesador puede ejecutar. Básicamente el compilador convierte un idioma a otro.
Cuando el compilador para crear el código ejecutable hay una serie de opciones que se pueden invocar, en el caso del compilador GCC utilizado el IDE de Arduino hay 5 opciones de optimización de tamaño y velocidad como detallados aquí. Las diferentes opciones de causan el compilador hacer más esfuerzo para optimizar el código ejecutable para el tamaño o la velocidad.
La optimización por defecto en el IDE de Arduino está para el tamaño, esta opción es "-Os" en la línea de comandos. La razón es tan diferente el código tamaños y velocidades generados por las dos Arduino IDE es porque se utiliza una versión mucho más reciente del compilador GCC en el IDE de última. Claramente esta nueva versión crea un ejecutable significativamente menor pero la pena que aparece es una significativamente más lenta velocidad de ejecución.
Unas suaves palabras de precaución
Cabe señalar que, en casos raros, cambiar el nivel de optimización puede afectar el comportamiento un programa cuando se ejecuta. Esto es porque trata de optimización para "reescribir" el software para hacer un "tiempo" y "tamaño" ejecutable eficiente. La probabilidad de que la función del software se ve afectada depende de la "agresividad" del compilador modifica el código.
El nivel de optimización predeterminada para el IDE de Arduino (-Os) ya es bastante agresivo por lo que es muy poco probable que usted verá nuevos problemas de comportamiento introducidos si se cambia el nivel de optimización.
Porque el compilador sigue un conjunto de reglas que a veces necesitamos incluir "directivas de compilación" en el propio software para evitar problemas durante el proceso de optimización, un problema clásico es la falta de declarar las variables como "volátil" cuando son utilizados por un programa principal y una rutina de interrupción... Si no sabes qué "volátil" significa entonces Google "por qué es volátil".