3 votos

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

A menudo me vienen a la situación en la que no estoy seguro de cómo de grande es mi variable, por ejemplo: integer, corto, largo?

Sé que se puede encontrar el tamaño de la variable con sizeof(); función en C.

Pero ahora estoy en la situación en la que estoy tratando de analizar algunos de los datos de archivo y tengo que la estructura de archivos, cuando me doy cuenta de que todo lo que está escrito para un microcontrolador de 8 bits, no estoy seguro de cómo puedo saber la cantidad de datos de tipo INT que representa en esa documentación? Es de 8 bits - 1B ? Cómo el tamaño de las variables depende del procesador arhitecture? Si estoy en lo correcto max tamaño variable en un procesador de 8 bits es el 1B, por lo que char - int y todas las demás variables son 1B tamaño máximo?

5voto

Stefan Arentz Puntos 151

Incluso si los 8 bits del procesador sólo admite el manejo de datos a 8 bits, el compilador se encargará de todo el material necesario para la 16 bits de la suma y la transmisión de datos, por lo que el tamaño en bits de tipo int, a corto o a otros que son puramente basado en sus compiladores configuración.

Normalmente, puede encontrar esta información en algún lugar en el compilador manual.

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

Si no puede utilizar esta, crear su propia versión de la misma y crear un encabezado con algo a lo largo de esas líneas (o obtén un completo stdint.h y adaptarlo a tu compilador):

typedef unsigned char uint8_t

donde por supuesto, tienen que comprobar su compilador manual para obtener el derecho compilador tipos.

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

Hay algunos problemas, aunque, como especialmente para dispositivos embebidos que no todos los tipos de datos son compatibles con todos los compiladores. De 64 bits tipos de datos son a menudo ausente, por lo que hay dos resultados posibles: o bien el programa no compilará más (creo que es el buen caso) o que alguien lo ha typedefed el de 64 bits tipo de datos a una más pequeña y su programa puede devolver resultados inesperados debido a que.

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

Como un ejemplo en donde 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, usted tiene que mirar en la Guía de Desarrollo, y allí, bajo la Referencia de la Información que se encuentra la representación de Datos. En ese punto usted encontrará todos los detalles necesarios para manejar correctamente los datos. La alineación, el Tamaño y el Rango son todos los que allí se indican.

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

2voto

Bernd Puntos 61

Necesitas mirar tu documentación del compilador de C Debe deletrear las respuestas que necesita.

Un compilador de 8 bits puede tener "int" como 8 bits, 16 bits o algo más. En algunos casos, el número de bits en un "int" predeterminado puede seleccionarse mediante un modificador de línea de comando del compilador o una variable de entorno.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X