¿Variables locales o campos de clase?

¿Variables locales o campos de clase?
  1. Apila más rápido que Heap.

    void f()
    {
        int x = 123; // <- located in stack
    }
    
    int x; // <- located in heap
    void f()
    {
        x = 123  
    }
    
  2. No olvide el principio de los datos de localidad. Los datos locales deberían almacenarse mejor en la memoria caché de la CPU. Si los datos están cerca, se cargarán por completo en la memoria caché de la CPU y la CPU no tiene que obtenerlos de la memoria.


El rendimiento depende del número de pasos necesarios para obtener la variable. Las direcciones de las variables locales se conocen en el momento de la compilación (son un desplazamiento conocido en la pila), para acceder a un miembro, carga el objeto 'esto' para obtener la dirección del objeto real, antes de poder obtener la dirección de la variable miembro.


Incluso si lo fuera, habrá una diferencia casi no medible en estos casos. Probablemente en el primer caso, se realiza alguna optimización en el nivel de registro del procesador, pero nuevamente:

  • es casi irrelevante
  • y lo que es más importante, a menudo impredecible.

En términos de memoria, es exactamente lo mismo, no hay ninguna diferencia.

El primer caso generalmente es mejor:a medida que declara la variable, se usa de inmediato, que es un buen patrón de uso común, ya que es

  • fácil de entender (alcance de las responsabilidades)
  • refactorización fácil