Robaré la primera oración de la respuesta de Péter Török pero elaboraré de manera diferente: no necesariamente. También puede decidir usar el valor bruto 5 en lugar del myval
código compilado.
Tratar myval
como una variable regular al asignarle espacio en la memoria puede tener implicaciones de rendimiento que varían de minúsculas a severas dependiendo de la arquitectura y cómo maneja la memoria.
Trabajando de esa manera, un compilador emitiría una instrucción que diga algo como "registro de carga R con lo que esté en la ubicación de memoria myval
". La ubicación demyval
como un operando de la instrucción, por lo que proviene directamente del mismo bloque de datos que la instrucción misma. En las CPU modernas, este valor estará fácilmente disponible en el chip debido a la captación previa de instrucciones. Con la dirección en la mano, la CPU todavía tiene que sacar el valor de la memoria. Eso podría ir rápidamente si la ubicación está cerca en caché o no tan rápido si no lo está. La CPU no solo tiene que salirse del chip para obtener el valor, sino que podría obligarla a eliminar otros datos más útiles de la memoria caché que tendrán que ser devueltos más tarde. Cuando el programa se ejecuta en un sistema operativo que virtualiza la memoria, el acceso a esa ubicación puede causar un error de página, lo que puede provocar que el programa se suspenda hasta que la página requerida se introduzca en la RAM a través de E / S periféricas (p. Ej., Disco),
Al cablear el valor constante en el código objeto, el compilador emitiría una instrucción como "cargar el registro R con el valor 5
". Al igual que la dirección de memoria descrita anteriormente, 5
sería un operando para la instrucción y estaría disponible de la misma manera (es decir, captado previamente). Ahí es donde termina la similitud, porque la CPU ahora tiene todo lo que necesita para ponerla 5
en el registro R y continuar con su negocio. Dado que las direcciones y los registros suelen ser del mismo tamaño, no hay diferencia en el número de bytes que ocupa la instrucción y la ejecución real se lleva a cabo con cero posibilidades de fallas en la caché y fallas de página que pueden ocurrir cuando pescas algo sin memoria.
El compilador podría, como señaló Péter, asignar espacio y un símbolo para las myval
compilaciones de depuración. No habría ningún daño al hacer esto y aún cablear su valor, ya que el valor sigue siendo el mismo, pase lo que pase y el símbolo realmente está ahí para que los humanos lo usemos en la depuración.
Tenga en cuenta que esto solo se aplica a los valores que se pueden mantener en los registros, porque los registros son enteros por naturaleza. Otras constantes terminarán en la memoria.
storage of const object
la fuente de su pregunta tiene poco valor.