
paulo1205
(usa Ubuntu)
Enviado em 18/01/2022 - 05:25h
Acrescentando algumas informações...
No caso do seu exemplo, em particular, no qual você usou uma constante do tipo
double, nem ao menos é verdade que a constante é embutida no código e, por isso, não ocuparia espaço extra.
Imagine o seguinte código, muito reduzido (e incompleto, mas suficiente como exemplo do que eu quero mostrar).
#define VERSION 1.0
static const double UNIT=1.0;
void f(double);
int main(void){
f(VERSION);
f(UNIT);
}
Se você compilar esse código, convertendo-o para Assembly e com comentários (e.g. “
gcc -c -S -fverbose-asm -Wextra -Werror -pedantic-errors -O0 arquivo.c”), e examinar o código gerado, vai ver que a constante
1.0 será colocada duas vezes na seção
.rodata (de
read-only data, para dados que não serão modificados): uma vez para o símbolo
UNIT e uma vez associada a um objeto “anônimo” (a que o compilador vai atribuir o nome interno “
.LC0”).
Entretanto, esse mesmo código é afetado drasticamente por opções de otimização (experimente trocar aquele “
-O0” por outros valores, e compare o Assembly gerado).
Então, no fim das contas, o esparado ganho que você achava que poderia existir no seu código provavelmente não existe — pelo menos não naquele caso em particular.
... Então Jesus afirmou de novo: “(...) eu vim para que tenham vida, e a tenham plenamente.” (João 10:7-10)