C / C ++: tamanho de (curto), tamanho de (int), tamanho de (longo), tamanho de (long long), etc ... em uma máquina de 32 bits versus em uma máquina de 64 bits
Estou executando o Windows 7 (64 bits).
Esta questão analisa a mesma questão encontrada aqui:
longa em uma máquina de 64 bits
mas é mais aprofundado, pois lida com ainda mais tipos de dados e se aplica a C ou C ++, não a C #. Primeiro de tudo, estou usando o Microsoft Visual Studio Ultimate 2012. Infelizmente, embora esse IDE ofereça suporte a C # e Visual C ++, ele não suporta mais o Visual C simples. De qualquer forma, eu tentei criar o seguinte programa C ++ padrão no IDE:
#include <cstdio>
int main(int argc, char **argv) {
printf("sizeof(short): %d\n", (int) sizeof(short));
printf("sizeof(int): %d\n", (int) sizeof(int));
printf("sizeof(long): %d\n", (int) sizeof(long));
printf("sizeof(long long): %d\n", (int) sizeof(long long));
printf("sizeof(size_t): %d\n", (int) sizeof(size_t));
printf("sizeof(void *): %d\n", (int) sizeof(void *));
printf("Hit enter to exit.\n");
char *scannedText;
scanf("%s", &scannedText);
return 0;
}
e como não consegui encontrar a opção para executar um aplicativo de console, simplesmente coloquei um ponto de interrupção no "return 0;" declaração, de modo a ver a saída no console. O resultado foi:
sizeof(short): %d\n", 4
sizeof(int): %d\n", 4
sizeof(long): %d\n", 4
sizeof(long long): 8
sizeof(size_t): 4
sizeof(void *): 4
Hit enter to exit.
Os livros didáticos antigos de C indicam que int é definido como "tamanho da palavra", que é 16 em máquinas de 16 bits e 32 em máquinas de 32 bits. No entanto, esta regra parece quebrar em sistemas de 64 bits onde se espera que o "tamanho da palavra" seja 64. Em vez disso, pelo que eu li esses sistemas são como sistemas de 32 bits, mas têm melhor suporte para cálculos de 64 bits do que suas contrapartes de 32 bits fizeram. Portanto, os resultados obtidos com o programa C ++ acima são exatamente os mesmos que se obteriam em um sistema de 32 bits. O tamanho dos tipos de dados (size_t) (que pode ser usado para medir a quantidade de memória ocupada por objetos na memória) também armazena seus valores em 4 bytes, e também é interessante que o tamanho dos ponteiros usados para acessar os locais da memória instância sizeof (void *) mostra o número de bits usados para armazenar ponteiros genéricos em qualquer local na memória) também tem 32 bits.
Alguém sabe como a Visaul C foi removida do Visual Studio 2012 e se ainda é possível executar aplicativos de console do Visual Studio 2012 sem precisar definir um ponto de interrupção ou ler texto da entrada padrão antes de sair como acima para que a janela do console pausar antes de fechar?
Além disso, a minha interpretação está correta, ou eu tenho algo mal configurado no IDE de modo que, por exemplo, ele compila para 32 bits em vez de para sistemas de 64 bits? De acordo com um dos autores, já que meu sistema é de 64 bits, eu deveria ver os resultados descritos aqui para size_t e ponteiros:https://en.wikipedia.org/wiki/64-bit_computing#64-bit_data_models mas eu não estou vendo isso. Existe uma maneira de reconfigurar o Visual Studio para que ele possa suportar um modelo de memória de 64 bits, ao contrário do que estou vendo atualmente na saída do programa?
Obrigado.