A diferença entre o software de 32 bits e o de 64 bits é o tamanho dos ponteiros e talvez o tamanho do número inteiro. É isso aí.
Isso significa que todos os ponteiros do seu programa têm o dobro do tamanho. E (pelo menos em uma arquitetura ILP32 / LP64), seus long
s também têm o dobro do tamanho. Isso normalmente resulta em um aumento de cerca de 30% no tamanho do código do objeto. Isso significa que …
- seu código de objeto levará ~ 30% mais tempo para carregar do disco na RAM
- seu código de objeto ocupará ~ 30% mais espaço na memória
- você reduziu efetivamente a largura de banda da memória (para código de objeto) em ~ 20%
- você reduziu efetivamente o tamanho do cache de instruções em ~ 20%
Isso tem um efeito negativo não negligenciável no desempenho.
Fazer isso só faz sentido se você puder "recomprar" esses custos de desempenho de alguma forma. Basicamente, existem duas maneiras de fazer isso: você faz muita matemática de número inteiro de 64 bits ou precisa de mais de 4 memória mapeada de GiByte. Se um ou os dois forem verdadeiros, faz sentido usar software de 64 bits, caso contrário, não.
Nota: existem algumas arquiteturas nas quais não existem variantes correspondentes de 32 ou 64 bits. Nesse caso, a pergunta obviamente não faz sentido. Os mais conhecidos são o IA64, que tem apenas 64 bits e não possui variante de 32 bits, e x86 / AMD64, que são, embora estreitamente relacionados, arquiteturas diferentes , x86 sendo apenas 32 bits e AMD64 sendo apenas 64 bits.
Na verdade, essa última afirmação não é mais 100% verdadeira. O Linux adicionou recentemente o x32 ABI, que permite executar o código AMD64 com ponteiros de 32 bits; portanto, mesmo que essa não seja uma arquitetura de CPU "adequada", é uma maneira de usar a arquitetura AMD64 de maneira a ter uma arquitetura nativa. Variante de 32 bits. Isso foi feito precisamente porque a sobrecarga de desempenho que mencionei acima estava causando problemas reais mensuráveis e quantificáveis para usuários do mundo real que executam código do mundo real em sistemas do mundo real.