Roubarei a primeira frase da resposta de Péter Török, mas elaborarei de maneira diferente: não necessariamente. Também pode optar por usar apenas o valor bruto 5 em vez de myval
no código compilado.
Tratar myval
como uma variável regular alocando espaço para ela na memória pode ter implicações de desempenho que variam de minúsculas a severas, dependendo da arquitetura e de como ela lida com a memória.
Trabalhando dessa maneira, um compilador emitirá uma instrução que diz algo como "carregar o registrador R com o que estiver no local da memória myval
". A localização demyval
como um operando da instrução, ela sai diretamente do mesmo bloco de dados que a própria instrução. Em CPUs modernas, esse valor estará prontamente disponível no chip devido à pré-busca de instruções. Com o endereço em mãos, a CPU ainda precisa obter o valor da memória. Isso pode ocorrer rapidamente se o local estiver próximo no cache ou não tão rapidamente se não estiver. Não apenas a CPU precisa sair do chip para obter o valor, como pode forçá-la a extrair outros dados mais úteis do cache que precisarão ser trazidos mais tarde. Quando o programa está sendo executado em um sistema operacional que virtualiza a memória, o acesso a esse local pode causar uma falha na página, resultando na suspensão do programa até que a página necessária seja trazida para a RAM via E / S periférica (por exemplo, disco),
Ao conectar o valor constante ao código do objeto, o compilador emitirá uma instrução como "load register R with the value 5
". Como o endereço de memória descrito acima, 5
seria um operando para a instrução e disponível da mesma maneira (ou seja, pré-buscado). É aí que a semelhança termina, porque a CPU agora tem tudo o que precisa para colocar o 5
registro R e continuar com seus negócios. Como endereços e registradores geralmente têm o mesmo tamanho, não há diferença no número de bytes que a instrução ocupa e a execução real ocorre com zero chances de erros de cache e falhas de página que podem ocorrer quando você retira algo da memória.
O compilador pode, como Péter apontou, alocar espaço e um símbolo para myval
compilações de depuração. Não haveria nenhum mal em fazer isso e ainda manter a fiação do seu valor, já que o valor permanece o mesmo, não importa o quê e o símbolo esteja realmente lá para nós, humanos, usarmos na depuração.
Observe que isso se aplica apenas a valores que podem ser mantidos em registros, porque os registros são números inteiros por natureza. Outras constantes acabarão na memória.
storage of const object
a fonte da sua pergunta tem pouco valor.