tamaño entero en c depende de qué?

¿El tamaño del entero depende de qué?

¿El tamaño de una variable int en C depende de la máquina o del comstackdor?

Es dependiente de la implementación. El estándar C solo requiere que:

  • char tiene al menos 8 bits
  • short tiene al menos 16 bits
  • int tiene al menos 16 bits
  • long tiene al menos 32 bits
  • long long tiene al menos 64 bits (agregado en 1999)
  • sizeof (char) ≤ sizeof (short) ≤ sizeof (int) ≤ sizeof (long) ≤ sizeof (long long)

En los días de 16/32 bits, el estándar de facto era:

  • int era el tamaño entero “nativo”
  • Los otros tipos fueron el tamaño mínimo permitido.

Sin embargo, los sistemas de 64 bits en general no int 64 bits int , lo que habría creado la difícil situación de tener tres tipos de 64 bits y ningún tipo de 32 bits. Algunos comstackdores se expandieron a 64 bits.

Depende principalmente del comstackdor. Por ejemplo, si tiene un procesador x86 de 64 bits, puede usar un antiguo comstackdor de 16 bits y obtener ints de 16 bits, un comstackdor de 32 bits y obtener ints de 32 bits, o un comstackdor de 64 bits y obtener 64 -bit ints.

Depende del procesador en la medida en que el comstackdor apunte a un procesador particular, y (por ejemplo) un antiguo procesador de 16 bits simplemente no ejecutará el código que apunta a un nuevo y shiny procesador de 64 bits.

Los estándares C y C ++ garantizan un tamaño mínimo (indirectamente especificando rangos mínimos admitidos):

 char: 8 bits short: 16 bits long: 32 bits long long: 64 bits 

La garantía también de que los tamaños / rangos son estrictamente no decrecientes en el siguiente orden: char, short, int, long y long long 1 .

1 long long se especifica en C99 y C ++ 0x, pero algunos comstackdores (por ejemplo, gcc, Intel, Comeau) también lo permiten en el código C ++ 03. Si lo desea, puede persuadir a la mayoría (si no a todas) de rechazar el código C ++ 03 long long .

Formalmente, las representaciones de todos los tipos de datos fundamentales (incluidos sus tamaños) dependen del comstackdor y solo del comstackdor. El comstackdor (o, más adecuadamente, la implementación ) puede servir como una capa de abstracción entre el progtwig y la máquina, ocultando completamente la máquina del progtwig o distorsionándola de la forma que más le convenga.

Pero en la práctica, los comstackdores están diseñados para generar el código más eficiente para una máquina y / o sistema operativo dado. Para lograr que los tipos de datos fundamentales tengan una representación natural para la máquina y / o sistema operativo dados. En ese sentido, estas representaciones dependen indirectamente de la máquina y / o sistema operativo.

En otras palabras, desde el punto de vista abstracto, formal y pedante, el comstackdor es libre de ignorar completamente las representaciones de los tipos de datos específicos de la máquina. Pero no tiene sentido práctico. En la práctica, los comstackdores hacen un uso completo de las representaciones de tipos de datos proporcionadas por la máquina.

Aún así, si la máquina no admite algún tipo de datos, el comstackdor puede proporcionar ese tipo de datos a los progtwigs implementando su soporte en el nivel del comstackdor (“emulando”). Por ejemplo, los tipos de enteros de 64 bits normalmente están disponibles en comstackdores de 32 bits para máquinas de 32 bits, aunque la máquina no los admite directamente. En el pasado, los comstackdores a menudo proporcionaban soporte a nivel de comstackdor para tipos de punto flotante para máquinas que no estaban equipadas con un coprocesador de punto flotante (y, por lo tanto, no admitían tipos de punto flotante directamente).

Como dijo MAK, depende de la implementación. Eso significa que depende del comstackdor. Normalmente, un comstackdor apunta a una sola máquina, por lo que también puede pensar que depende de la máquina.

AFAIK, el tamaño de los tipos de datos depende de la implementación . Esto significa que depende completamente del implementador (es decir, el tipo que escribe el comstackdor) elegir cuál será.

Así que, en definitiva, depende del comstackdor. Pero a menudo es más sencillo usar el tamaño que sea más fácil de asignar al tamaño de palabra de la máquina subyacente, por lo que el comstackdor a menudo usa el tamaño que mejor se adapta a la máquina subyacente.

Depende del entorno de ejecución sin importar el hardware que tenga. Si está utilizando un sistema operativo de 16 bits como DOS, entonces será de 2 bytes. En un sistema operativo de 32 bits como Windows o Unix, es de 4 bytes y así sucesivamente. Incluso si ejecuta un sistema operativo de 32 bits en un procesador de 64 bits, el tamaño será solo de 4 bytes. Espero que esto ayude.

Depende tanto de la architecture (máquina, tipo ejecutable) como del comstackdor. C y C ++ solo garantizan ciertos mínimos. (Creo que esos son char: 8 bits, int: 16 bits, largos: 32 bits)

C99 incluye ciertos tipos de ancho conocidos como uint32_t (cuando es posible). Ver stdint.h

Actualización : Abordó las preocupaciones de Conrad Meyer.

El tamaño de una variable entera depende del tipo de comstackdor:

  • Si tienes un comstackdor de 16 bits:

     size of int is 2 bytes char holds 1 byte float occupies 4 bytes 
  • Si tienes un comstackdor de 32 bits:

    el tamaño de cada variable es solo el doble de su tamaño en un comstackdor de 16 bits

     int hold 4 bytes char holds 2 bytes float holds 8 bytes 

Lo mismo sucede si tienes un comstackdor de 64 bits, y así sucesivamente.