2010-07-08 21 views
14

Cuál es la función principal de sizeof (soy nuevo en C++). Por ejemplo¿Qué hace sizeof?

int k=7; 
char t='Z'; 

¿Qué significan sizeof (k) o sizeof (int) y sizeof (char)?

+0

Te estás perdiendo un 'en tu char. – Konrad

+8

@Tyler McHenry La sincronización es poco probable para mí en 0.08 segundos. – DumbCoder

+8

@davit: si vas a aprender un lenguaje de programación, realmente deberías intentar leer un libro introductorio decente sobre el lenguaje para obtener los conceptos básicos, no solo dejarlo en prueba, error, conjeturas y preguntas interminables sobre SO. –

Respuesta

49

sizeof(x) devuelve la cantidad de memoria (en bytes) que ocupa la variable o tipo x. No tiene nada que ver con el valor de la variable.

Por ejemplo, si tiene una matriz de algún tipo arbitrario T, entonces la distancia entre los elementos de esa matriz es exactamente sizeof(T).

int a[10]; 
assert(&(a[0]) + sizeof(int) == &(a[1])); 

Cuando se utiliza en una variable, que es equivalente a usar en el tipo de esa variable:

T x; 
assert(sizeof(T) == sizeof(x)); 

Como regla empírica, lo mejor es utilizar el nombre de la variable donde posibles, por si acaso los cambios de tipo:

int x; 
std::cout << "x uses " << sizeof(x) << " bytes." << std::endl 
// If x is changed to a char, then the statement doesn't need to be changed. 
// If we used sizeof(int) instead, we would need to change 2 lines of code 
// instead of one. 

Cuando se utiliza en los tipos definidos por el usuario, sizeof sigue devolviendo la cantidad de memoria utilizada por las instancias de ese tipo, pero vale la pena señalar que esto no lo hace necesario es igual a la suma de sus miembros.

struct Foo { int a; char b; }; 

Mientras sizeof(int) + sizeof(char) es típicamente 5, en muchas máquinas, sizeof(Foo) puede haber 8 porque el compilador necesita pad out la estructura de manera que quede en 4 límites de bytes. Este no es siempre el caso, y es muy posible que en su máquina sizeof(Foo) sea 5, pero no puede depender de ello.

+0

int significa que si la variable t se da t = 100 que sizeof (t) = 1? –

+0

pero me muestra 4 por qué –

+0

'sizeof' no tiene nada que ver con el * valor * de la variable. Tiene que ver con el tipo.Le dice que en su sistema, todas las variables de tipo 'int' requieren 4 bytes de almacenamiento. –

7

Para añadir a la respuesta de Peter Alexander: sizeof produce el tamaño de un valor o tipo en múltiplos del tamaño de un char --- char que se define como la unidad más pequeña de memoria direccionable (por C o C++) para una arquitectura dada (y, en C++ al menos, al menos 8 bits de tamaño de acuerdo con el estándar). Esto es lo que generalmente se entiende por "bytes" (la unidad direccionable más pequeña para una arquitectura dada) pero nunca está de más aclarar, y ocasionalmente hay preguntas sobre la variabilidad de sizeof (char), que por supuesto siempre es 1.

+0

Un byte no es necesariamente la "unidad direccionable más pequeña para una arquitectura determinada". En algunas computadoras Cyber ​​de CDC, la unidad direccionable más pequeña es una palabra de 16 bits (la dirección 0 es de 16 bits, la dirección 1 es una distinta de 16 bits), y se refieren a las dos mitades como bytes. –

+0

@James: Correcto: mi punto es que "byte" es un término intrínsecamente ambiguo, y no importa cómo lo defina, alguien en algún lugar lo usará de manera diferente. Interesante sobre los CDC. –

+0

La mayoría de las personas estará de acuerdo en que un byte es de 8 bits, y aunque solía haber cierta confusión, ahora está estandarizado: IEC 80000-13. Por el contrario, la unidad direccionable más pequeña en una máquina a menudo se llama una palabra, y depende de la máquina. Hay arquitecturas de 16, 32 y 64 bits, pero incluso en esos contextos, un byte seguirá siendo de 8 bits. – Zane