I'm procurando por informações detalhadas sobre o tamanho dos tipos básicos de C++. Eu sei que depende da arquitetura (16 bits, 32 bits, 64 bits) e do compilador.
Mas há algum padrão para C++?
I'm usando o Visual Studio 2008 em uma arquitetura 32-bit. Aqui está o que eu recebo:
char : 1 byte
short : 2 bytes
int : 4 bytes
long : 4 bytes
float : 4 bytes
double: 8 bytes
Tentei encontrar, sem muito sucesso, informações confiáveis com os tamanhos de char
, short
, int
, long
, double
, float
(e outros tipos que eu não pensei't think of) sob diferentes arquiteturas e compiladores.
Na prática não há... 39; não há tal coisa. Muitas vezes você pode esperar que std::size_t
represente o tamanho inteiro nativo não assinado na arquitetura atual. ou seja, 16-bit, 32-bit ou 64-bit mas é'nem sempre é o caso como apontado nos comentários a esta resposta.
No que diz respeito a todos os outros tipos incorporados, depende realmente do compilador. Aqui's dois trechos extraídos do rascunho de trabalho atual do último padrão C++:
Há cinco tipos inteiros padrão assinados: char, int curto, int, int longo, e int longo longo. Nesta lista, cada tipo fornece pelo menos a mesma quantidade de armazenamento que os que o precedem na lista.
Para cada um dos tipos inteiros padrão assinados, existe um tipo inteiro padrão correspondente (mas diferente) não assinado: char não assinado, int curto não assinado, int não assinado, int longo não assinado e int longo não assinado, cada um dos quais ocupa a mesma quantidade de armazenamento e tem os mesmos requisitos de alinhamento.
Se você quiser, pode afirmar estaticamente (tempo de compilação) o tamanho desses tipos fundamentais. Ele alertará as pessoas para pensar em portar o seu código se o tamanho das suposições mudar.
Como você mencionou - depende em grande parte do compilador e da plataforma. Para isso, verifique a norma ANSI, http://home.att.net/~jackklein/c/inttypes.html
Aqui está o do compilador da Microsoft: Faixas de Tipo de Dados.