He descargado MinGW-64, así que ahora puedo compilar programas de 64 bits para Windows 7, usando g ++ 4.7.0 (experimental). Pero la siguiente línea:sizeof (long) en 64 bits C++
cout << sizeof(long) << " " << sizeof(void*) << endl ;
impresiones 4 8
, no 8 8
. La documentación de g ++ 4.6.0 dice:
Los conjuntos entorno de 64 bits a 32 bits int y largo y el puntero de 64 bits
¿Alguien sabe por qué no es sizeof(long)
8?
Editado para agregar: La fuente de mi confusión fue que g ++ 4.7.0 para Windows de 64 bits no es (todavía) una parte oficial de la Colección de compiladores de GNU. Y es la primera versión de 64 bits con un long
de 32 bits, por lo que la documentación simplemente no se aplica a ella. De hecho, si vas a la relevant web page, la entrada completa para IA-32/x86-64 consiste en esto:
...
Parece alguien simplemente votó negativamente la mitad de las respuestas sin dejar ningún comentario ... – Mysticial
@Mystical: ¡Y mi pregunta también! – TonyK
Si necesita un entero de 64 bits use int64_t/uint64_t o defina el suyo. De esta forma, su código será portátil y no dependerá de los detalles de la plataforma para los tamaños int/long/short. – David