Me preguntaba por qué se usa este size_t
donde puedo usar decir int tipo. Se dice que size_t
es un tipo de devolución del operador sizeof
. Qué significa eso? como si utilizo sizeof(int)
y guardo su devolución a una variable de tipo int
, entonces también funciona, no es necesario almacenarlo en una variable de tipo size_t
. Yo sólo quiero saber claramente el concepto básico de usar size_t
con example.Thanks claramente comprensibles¿alguien puede explicar por qué size_t type se usa con un ejemplo?
Respuesta
size_t
se garantiza que sea capaz de representar el mayor tamaño posible, int
no lo es. Esto significa que size_t
es más portátil.
Por ejemplo, ¿qué pasa si int
solo puede almacenar hasta 255 pero puede asignar matrices de 5000 bytes? Claramente esto no funcionaría, sin embargo con size_t
lo hará.
Técnicamente 'int' tiene que tener al menos 16 bits, como tiene que abarcar al menos el rango [-32767..32767]. (¿Por qué no? 32768? Para acomodar los sistemas de complemento de uno y de signo y magnitud, en caso de que alguien quiera usar C en una máquina antigua de Univac. Por supuesto, esos tienen números enteros de 18 y 36 bits, con 9 bits char'.) – torek
@torek Por alguna razón, tengo la impresión de que int solo requiere ser> 16 en C, no en C++. Aunque no he comprobado el estándar. – Pubby
@Pubby: C++ hereda eso de C. 1.1 p2 C++ es un lenguaje de programación de propósito general basado en el lenguaje de programación C como se describe en ISO/IEC 9899: 1999 Lenguajes de programación
–
El ejemplo más simple es bastante anticuado: en un viejo int
sistema de 16 de bits con 64 k de RAM, el valor de un int
puede estar en cualquier lugar -32.768 a 32.767, pero después de:
char buf[40960];
el almacenamiento intermedio buf
ocupa 40 kbytes, por lo que sizeof buf
es demasiado grande para caber en un int
, y necesita un unsigned int
.
Lo mismo puede suceder hoy en día si se utiliza 32 bits int
pero permiten que los programas tengan acceso a más de 4 GB de memoria RAM a la vez, como es el caso de los llamados modelos "I32LP64" (32 bits int
, 64 -bit long
y puntero). Aquí el tipo size_t
tendrá el mismo rango que unsigned long
.
Es la implementación definida, pero en los sistemas de 64 bits, encontrará que size_t
es a menudo de 64 bits, mientras que int
sigue siendo de 32 bits (a menos que sea el modelo ILP64 or SILP64).
dependiendo de la arquitectura en la que se encuentre (16 bits, 32 bits o 64 bits) una int podría tener un tamaño diferente.
si quieres un tamaño específico utilizo uint16_t o uint32_t .... Se puede extraer de este hilo para más información
What does the C++ standard state the size of int, long type to be?
Se utiliza sobre todo para la fundición size_t punteros en enteros sin signo de la misma tamaño, para realizar cálculos en los punteros como si fueran enteros, que de otro modo se evitarían en tiempo de compilación. Tal código está destinado a compilarse y compilarse correctamente en el contexto de diferentes tamaños de puntero, p. Modelo de 32 bits frente a 64 bits.
- 1. ¿Alguien puede explicar Mutex y cómo se usa?
- 2. ¿Alguien puede explicar OAuth?
- 3. ¿Alguien puede explicar el attr?
- 4. ¿Alguien puede explicar el ejemplo de solicitud-respuesta corredor zeromq?
- 5. ¿Puede alguien explicar por qué significan estos resultados de ApacheBench?
- 6. ¿Alguien puede explicar esta sintaxis?
- 7. puede alguien explicar la diferencia
- 8. ¿Alguien puede explicar el archivo Spring web.xml?
- 9. ¿Alguien puede explicar Microsoft Unity?
- 10. puede alguien explicar el por qué el primero el ejemplo se obtienen resultados diferentes a los siguientes 2
- 11. ¿Alguien puede explicar el espacio de nombres en javascript con un ejemplo?
- 12. ¿alguien puede explicar cómo funciona este stopPropagation?
- 13. Puede alguien explicar qué función ($) hace en jQuery
- 14. ¿Alguien puede explicar esto: 0.2 + 0.1 = 0.30000000000000004?
- 15. ¿Alguien puede explicar el atributo HTML5 aria- *?
- 16. ¿Alguien puede explicar el eclipse.p2.profile
- 17. ¿Alguien me puede explicar las compensaciones hexadecimales?
- 18. ¿Alguien puede mostrar un ejemplo de MethodImplOptions.ForwardRef
- 19. ¿Alguien puede explicar este código de Java
- 20. ¿Alguien me puede explicar métodos anónimos?
- 21. ¿Alguien puede explicar el mapeo de servlets?
- 22. ¿Alguien puede explicar que debe anular?
- 23. ¿Puede alguien explicar este uso C++ referencia
- 24. ¿Podría alguien explicar __declspec (desnudo) por favor?
- 25. ¿Alguien puede explicar mappedBy in hibernate?
- 26. Advertencias de destrucción de Python con Monostate __new__ - ¿Alguien puede explicar por qué?
- 27. ¿Alguien puede explicar este truco 'doble negativo'?
- 28. ¿Alguien puede explicar la detección de colisiones por píxel?
- 29. ¿Alguien puede explicar cómo usar FastTags
- 30. ¿Alguien puede explicar este método de Javascript?
Puede utilizar un int para almacenar la devolución de sizeof de la misma manera que a veces puede almacenar 2147483647 en un int. Simplemente sucede que los tamaños específicos de implementación coinciden correctamente. – Lalaland
Consulte también esta pregunta: http://stackoverflow.com/questions/918787/whats-sizeofsize-t-on-32-bit-vs-the-various-64-bit-data-models – ChrisWue
¿Alguien puede confirmar que size_t es el mismo tamaño de los registros del procesador? – arthurprs