El prototipo de memset es void *memset(void *s, int c, size_t n);
. Entonces, ¿por qué el tercer parámetro es del tipo size_t
? memset
es solo un ejemplo, quiero razones más generales. Gracias por adelantado.¿Por qué son los parámetros de función de tipo size_t?
Respuesta
size_t
es el tipo de retorno del operador sizeof
y se usa para describir tamaños de memoria. En el caso de memset
, especifica el número de bytes (n) en los bloques de memoria que se deben establecer en el valor dado (c).
El tamaño en bits de size_t
varía en función del espacio de direcciones de la plataforma de destino. No siempre se correlaciona con el tamaño del registro. Por ejemplo, en una arquitectura de memoria segmentada, el sizeof (size_t)
puede ser más pequeño que el sizeof (void *)
. Normalmente, size_t
sería 4 bytes en una máquina de 32 bits, 8 bytes en una máquina de 64 bits, etc.
¿Podría explicarnos más acerca de por qué 'sizeof (size_t) puede ser más pequeño que el sizeof (void *) '? Muchas gracias;) – Grissiom
En la memoria segmentada, el tamaño de cada segmento es menor que el tamaño total de la memoria. Por ejemplo, en un 80286 puede direccionar 2^24 bytes totales pero solo usar 2^16 bytes contiguos dentro de cada segmento. Ver http://en.wikipedia.org/wiki/SeguridadMemoria Ahora, no tengo un 80286 con un compilador C99 a mano, pero supongo que sizeof (size_t) == 2 y sizeof (void) *) == 4. –
Entonces, ¿qué será cuando intente memset 2^20 bytes en 80286? Aunque es demasiado grande, pero creo que tiene sentido porque podemos abordar 2^24 bytes. – Grissiom
size_t
es el tipo utilizado para indicar el tamaño de los objetos. En los tamaños C de los tipos enteros (int
, long
, etc.) dependen de la implementación y debe usar el tipo correcto en cada implementación del compiladorp de modo que el tamaño sea lo suficientemente grande como para almacenar todos los valores posibles.
Los encabezados que vendrán con la plataforma SDK tendrán un typedef
que asignará size_t
al tipo de entero a la derecha. Entonces, escribe memset()
una vez y compila directamente en cada implementación.
size_t es un tipo adecuado para representar la cantidad de memoria que requiere un objeto de datos. Es un tipo entero sin signo (generalmente, typedef unsigned int size_t;).
Lea this enlace para obtener más información.
size_t
se garantiza que es lo suficientemente grande como para mantener un puntero en todas las plataformas.
Ver la respuesta del juez Maygarden. – user9876
Nice downmod, pero si realmente lees y entiendes la respuesta del juez Maygarden, verás que estamos diciendo exactamente lo mismo. "El tamaño en bits de size_t varía en función del espacio de direcciones de la plataforma objetivo" es isomorfo a "size_t se garantiza que es lo suficientemente grande como para contener un puntero en todas las plataformas". El juez Maygarden dijo que size_t podría ser más pequeño que el tamaño de registro en algunas plataformas. Él no dijo que podría ser más pequeño que el tamaño del puntero, porque no puede ser. – jemfinch
Entonces, ¿cuál es la diferencia entre el tamaño del registro y el tamaño del puntero? – Grissiom
- 1. ¿Por qué Scala no infiere completamente los parámetros de tipo cuando los parámetros de tipo están anidados?
- 2. ¿Por qué no pueden los parámetros de tipo de plantilla no ser del tipo de clase
- 3. ¿Cuántos parámetros de función son demasiados?
- 4. ¿Están pedidos los parámetros C++ no de tipo para (función)?
- 5. ¿Por qué los prototipos de funciones incluyen nombres de parámetros cuando no son necesarios?
- 6. ¿Cuáles son las diferencias de uso entre size_t y off_t?
- 7. ¿Por qué los parámetros de `atan2`" están hacia atrás "?
- 8. son los parámetros de validación realmente útiles?
- 9. .NET equivalente de size_t
- 10. ¿Qué son los parámetros de evento y UI en Dialog
- 11. ¿Por qué el orden de evaluación para los parámetros de función no se especifica en C++?
- 12. ¿Por qué los arreglos de configuración son parámetros aceptables en PHP y Javascript?
- 13. de tipo no Parámetros
- 14. Nombre de clase de los parámetros de tipo en java?
- 15. parámetros de tipo frente a los genéricos
- 16. ¿Por qué no se reifican los parámetros de tipo genérico de Java en tiempo de ejecución?
- 17. ¿Por qué son paréntesis significativos en F # declaraciones de tipo
- 18. size_t contra uintptr_t
- 19. ¿El compilador optimiza los parámetros de función pasados por valor?
- 20. ¿Por qué mis parámetros vinculados son todos idénticos (usando Linq)?
- 21. Por qué los puntos son lentos
- 22. ¿Por qué los parámetros se comportan así?
- 23. aplicación parcial de los parámetros de tipo
- 24. Parámetros por defecto de tipo float = galimatías
- 25. función de PHP por defecto de parámetros
- 26. Plantillas variables sin los parámetros de función
- 27. ¿Cuáles son los requisitos para los parámetros de plantilla C++?
- 28. ¿Por qué las direcciones de función no son expresiones constantes?
- 29. ¿Por qué los nombres de argumento de función no son importantes en las declaraciones de C++?
- 30. ¿Qué pasa con los parámetros de salida?
Ver también: http://stackoverflow.com/questions/502856/whats-the-difference-between-sizet-and-int-in-c –