Duda uso de memoria RAM

Hola estoy mirando el tema de uso de la memoria RAM. He visto que hay ciertas funciones que te devuelven la memoria ram que está usando ARduino. He usado la función freeram y parace que funciona bien:

int freeRam()
{
    extern int __heap_start, *__brkval;
    int v;
    return (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval);
}

El problema que tengo es que al declarar una variable no incrementa su valor. Por ejemplo pongo int hola=25 y no incrementa el uso de la ram en 2 bytes. Cuando envió por serie una variable entonces si que incrementa el uso de la memoria ram. ¿Sabéis porque?

El código de prueba que he hecho es:

//char str[] = "Hello, world!";
int hola=25;

int freeRam()
{
    extern int __heap_start, *__brkval;
    int v;
    return (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval);
}

void setup()
{
  Serial.begin(9600);

}
void loop(){
//  Serial.println(str);
//  Serial.println(hola);
  Serial.print("freeMemory()=");
  Serial.println(freeRam());
  delay(1000);
}

Simple. Se llama optimizacion de codigo. C, pascal y muchos otros lenguajes de no linkean cosas no no usas. ¿Si la declaras pero nunca la usas, para que la va a linkear?, cuando la envias por el serial la estas usando por referencia y debe alojarla en el mapa de memoria. Incluso si declaras variables globales, que no se usan salvo en pocos lugares, el compilador la reutiliza por ejemplo para un For, porque sabe que la puede dejar en el stack al valor que tenia usarla y despues devolverle el valor, total ningun otro proceso la usa. De esta forma se ahorra muchisima ram.

Gracias maxid. No pensaba que fuese tan listo el compilador. Salu2

depende del metodo de optimizacion es el resultado. el compilador C de microchip tiene 3 versiones, free,profesional y una mas avanzadas, los cuales cada una tiene optimizacion de codigo 1, 2, 3, y el resultado es menor ram y rom