¿Cómo se relacionan los tamaños de las variables con la arquitectura de los procesadores?

3

A menudo entro en una situación en la que no estoy seguro de cuán grande es mi variable, por ejemplo: entero, corto, largo.

Sé que puedo encontrar el tamaño de la variable con sizeof (); funciona en C.

Pero ahora estoy en una situación en la que estoy tratando de analizar algunos datos del archivo y tengo esa estructura de archivos, cuando me doy cuenta de que todo eso está escrito para un microcontrolador de 8 bits, no estoy seguro de cómo puedo saber cómo ¿Cuántos datos representa INT en esa documentación? ¿Es de 8 bits - 1B? ¿Cómo el tamaño de las variables depende de la arquitectura del procesador? Si soy correcto, el tamaño máximo de la variable en un procesador de 8 bits es 1B, ¿entonces el carácter y todas las demás variables tienen un tamaño máximo de 1B?

    
pregunta Junior

2 respuestas

5

Incluso si su procesador de 8 bits solo admite el manejo de datos a 8 bits, el compilador manejará todo lo necesario para una adición de 16 bits y la transmisión de datos, por lo que el tamaño en bits de int, short u otros es puramente basado en la configuración de tus compiladores.

Normalmente encontrará esta información en algún lugar del manual del compilador.

Para salir de este problema, es una buena práctica no usar los tipos definidos por el compilador directamente. Es posible que desee incluir stdint.h (si está disponible) que proporciona tipos de datos con nombres claros, como uint8_t, que es un entero sin signo con 8 bits.

Si no puede usar esto, cree su propia versión y cree un encabezado con algo en esas líneas (u obtenga un stdint.h completo y adáptelo a su compilador):

typedef unsigned char uint8_t

donde, por supuesto, tiene que consultar el manual del compilador para obtener los tipos de compilador correctos.

Este wikibook ofrece una buena explicación de stdint.h.

Sin embargo, hay algunos problemas, ya que especialmente para los dispositivos integrados, no todos los compiladores admiten todos los tipos de datos. Los tipos de datos de 64 bits a menudo faltan, por lo que hay dos resultados posibles: o su programa no se compilará más (creo que ese es el caso bueno) o alguien tiene typedef ed el tipo de datos de 64 bits a uno más pequeño y su programa podría generar resultados inesperados debido a eso.

En mi opinión, si un tipo de datos no es compatible, debería dar lugar a un error de compilación, por lo que el programador es realmente consciente del problema antes de golpearlo en el sistema.

Como ejemplo de dónde encontrar esa información para un compilador:

El IAR Embedded Workbench viene con un montón de documentación, para este tipo de información, debe buscar en la Guía de desarrollo y, debajo de la Información de referencia, encontrará la representación de datos. Bajo ese punto encontrará todos los detalles necesarios para manejar los datos correctamente. La alineación, el tamaño y el rango se dan todos allí.

Data type              Size      Range             Alignment
bool                   8 bits    0 to 1            1
char                   8 bits    0 to 255          1
...
signed long long       64 bits  -2^63 to 2^63-1    8
unsigned long long     64 bits   0 to 2^64-1       8
    
respondido por el Arsenal
2

Necesitas mirar la documentación de tu compilador de C. Debería deletrear las respuestas que necesita.

Un compilador de 8 bits puede tener "int" ser 8 bits, 16 bits o alguna otra cosa. En algunos casos, la cantidad de bits en un "int" predeterminado puede seleccionarse a través de un interruptor de línea de comando del compilador o una variable de entorno.

    
respondido por el Michael Karas

Lea otras preguntas en las etiquetas