c++ - tipos - De int, char, float y bool, ¿cuál es el más pequeño?
unsigned int para que sirve (10)
Si un programa declara cuatro variables, una de tipo int, una de tipo float, una de tipo char y otra de tipo bool, ¿qué variable ocuparía el menor espacio en la memoria?
El verdadero problema con la pregunta que ha publicado está en estas palabras:
occupy ... space in memory
Si se supone una interpretación, en la mayoría de las ocasiones usted asumirá uno de los compiladores populares actuales, en cuyo caso la respuesta 2
y 4
ocuparían el menor espacio en la memoria. Simplemente porque los compiladores populares actuales hacen que char
y bool
ocupen un solo byte en la memoria ...
Como se describe en los comentarios, sizeof() is of type size_t
, que es integral .
Como sizeof(char) == 1
siempre es verdadero según el estándar, y el valor es integral; ningún otro sizeof(T)
puede ser inferior a 1
. Pero cualquier otra T
que no sea char
puede ser mayor que 1
dependiendo de la implementación. Como no puede asumir que sizeof(char) == sizeof(bool)
siempre se cumple, al menos puede suponer que sizeof(char) <= sizeof(bool)
cumple.
Lo que hace que sizeof(char)
sea la respuesta menos correcta ...
Lo siguiente es de una prueba de programación de "rellenar en casa" que forma parte del proceso de solicitud para una maestría en desarrollo de juegos en una universidad del Reino Unido:
Fundamentos de C ++
Si un programa declara cuatro variables, una de tipo
int
, una de tipofloat
, una de tipochar
y otra de tipobool
, ¿qué variable ocuparía el menor espacio en la memoria?
- En t
- carbonizarse
- flotador
- bool
De acuerdo con las instrucciones, solo hay una afirmación verdadera. Sin embargo, mi libro de C ++ (C ++ Pocket Reference, O''Reilly) dice: "El tamaño típico de un bool es de un byte" y "El tamaño de un char es de un byte. El tamaño de un byte técnicamente está definido por la implementación, pero rara vez es nada más que ocho bits ".
¿Estoy malinterpretando algo aquí? ¿Qué respuesta pondrías y por qué?
Creo que la respuesta correcta debería ser 2. Por definición, char es la unidad direccionable más pequeña.
También vea: ¿Por qué un char y un bool es del mismo tamaño en c ++?
El estándar C ++ da las siguientes relaciones:
sizeof(char) == 1
sizeof(char) <= sizeof(int) <= sizeof(long)
sizeof(float) <= sizeof(double)
...
El lenguaje no especifica ninguna relación entre estos tamaños de tipo que garantice una respuesta correcta a esa pregunta como se plantea. Todos ellos podrían ser tipos de 32 bits, por ejemplo.
La respuesta correcta es booleana en teoría, ya que un personaje requiere un conocimiento de al menos 8 bits, mientras que un bool técnicamente solo requiere un bit. usted podría romper 8 bools dentro de una sola charla si quisiera en teoría.
La respuesta es char
. Ninguna otra respuesta es correcta.
(Aunque estoy de acuerdo, la pregunta debería haberse redactado mejor).
El estándar C ++ 03 $ 5.3.3 / 1 dice:
sizeof (char), sizeof (signed char) y sizeof (unsigned char) son 1; el resultado de sizeof aplicado a cualquier otro tipo fundamental (3.9.1) está definido por la implementación. [Nota: en particular, sizeof (bool) y sizeof (wchar_t) están definidos por implementación.69)
(Encontré esta información en otra pregunta: ¿Por qué el tamaño de (bool) no está definido como uno, por el propio Estándar? ).
Dado que el tamaño mínimo es 1 (sizeof debe devolver valores integrales), esto significa que lo siguiente será cierto en cualquier implementación que siga los estándares:
sizeof(char) == 1
sizeof(bool) >= 1
sizeof(int) >= 1
sizeof(float) >= 1
La pregunta estaba mal formulada y probablemente debería haberse formulado más claramente como "... ¿qué variable no ocuparía necesariamente más espacio en la memoria que cualquier otra (en cualquier implementación estándar de C ++) que se comporte bien?"
Ningún tipo toma menos que char
, porque por definición sizeof(char) == 1
. Sin embargo, es totalmente posible que todos los tipos ocupen la misma cantidad de espacio.
(Representar cada tipo con 16 bits (con un formato de punto flotante inusual) sería suficiente para satisfacer los requisitos de rango de valores estándar; existe hardware real donde cada tipo tiene 32 bits.)
No hay garantía para el tamaño exacto de estos tipos, pero existe una garantía de que el char no es más grande que el corto y el corto no es más grande que el largo.
Por lo tanto, char siempre ocupará la menor cantidad de memoria, pero puede que no sea el único que lo haga. Todavía está garantizado, que nada más tendrá un tamaño más pequeño.
Puede haber una excepción con bool, sin embargo, en algunos microcontroladores incrustados especiales. Pueden tener una variable de bit
, que toma exactamente un bit, sin embargo, no están en la RAM sino en registros especiales.
Sin embargo, a menos que su arquitectura y compilador sean especialmente extraños o inusuales, puede razonablemente esperar que char
sea 1, short
sea 2, long
sea 4, long long
is 8 y int
sea 2 o 4, pero generalmente de 4 bytes.
sizeof (bool) está definido por la implementación.
Es decir, no se requiere que sea solo un byte único.
El tamaño típico de un bool
es un byte. No significa que siempre sea un byte . La pregunta se refiere a una realización que no tiene bools de un byte o implica que solo una variable tiene el tamaño más pequeño.