tamaño de la variable int

¿Cómo se decide el tamaño de int?

¿Es cierto que el tamaño de int dependerá del procesador? Para la máquina de 32 bits, será de 32 bits y para 16 bits es de 16.

En mi máquina se muestra como de 32 bits, aunque la máquina tiene un procesador de 64 bits y Ubuntu de 64 bits instalado.

Depende de la implementación. Lo único que garantiza el estándar C es que

sizeof(char) == 1 

y

 sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long) <= sizeof(long long) 

y también algunos valores mínimos representables para los tipos, lo que implica que char tiene una longitud de al menos 8 bits, int es de al menos 16 bits, etc.

Por lo tanto, debe ser decidido por la implementación (comstackdor, sistema operativo, ...) y documentarse.

Depende del comstackdor.

Por ejemplo: Pruebe un viejo comstackdor turbo C y daría el tamaño de 16 bits para un int porque el tamaño de la palabra (el tamaño que el procesador podría abordar con el menor esfuerzo) en el momento de escribir el comstackdor era 16.

Depende del comstackdor primario. Si usas turbo c significa que el tamaño entero es de 2 bytes. de lo contrario, está utilizando el gccompiler de GNU, lo que significa que el tamaño entero es de 4 bytes. Depende solo de implementacion en comstackdor de C.

El tamaño del entero depende básicamente de la architecture de su sistema. Generalmente, si tiene una máquina de 16-bit , su compiler deberá admitir un int de size 2 byte. Si su sistema es de 32 bits, entonces el comstackdor debe admitir 4 bytes para entero.

En más detalles,

  • El concepto de data bus de data bus entra en escena: sí, 16 bits, 32 bits no significa nada más que el size of data bus en su sistema.
  • El tamaño del bus de datos es necesario para determinar el tamaño de un número entero porque, El propósito del bus de datos es proporcionar datos al procesador. El máximo que puede proporcionar al procesador a una sola búsqueda es importante y este tamaño máximo es preferido por El comstackdor para dar un dato a la vez.
  • Basándose en el tamaño del bus de datos de su sistema, el comstackdor está diseñado para proporcionar el tamaño máximo del bus de datos como el tamaño del entero.
 x06->16-bit->DOS->turbo c->size of int->2 byte x306->32-bit>windows/Linux->GCC->size of int->4 byte 

Hacer int más amplio posible no es la mejor opción. (La elección es hecha por los diseñadores de ABI .)

Una architecture de 64 bits como x86-64 puede operar eficientemente en int64_t , por lo que es natural que un long sea ​​de 64 bits. (Microsoft mantuvo hasta 32 bits en su ABI x86-64, por varias razones de portabilidad que tienen sentido, dadas las bases de código y las API existentes. Esto es básicamente irrelevante porque el código portátil que realmente se preocupa por los tamaños de tipo debería usar int32_t e int64_t lugar de hacer suposiciones sobre int y long .)

Tener int be int32_t realidad es un código mejor y más eficiente en muchos casos. Una matriz de uso int solo 4B por elemento tiene solo la mitad de la huella de caché de una matriz de int64_t . Además, el tamaño predeterminado del operando es x86-64, el tamaño de operando de 32 bits, por lo que las instrucciones de 64 bits necesitan un byte de código adicional para un prefijo REX. Por lo tanto, la densidad del código es mejor con enteros de 32 bits (o 8 bits) que con 16 o 64 bits. (Consulte la wiki x86 para obtener enlaces a documentos / guías / recursos de aprendizaje).

Si un progtwig requiere tipos enteros de 64 bits para una operación correcta, no utilizará int . (Almacenar un puntero en un int lugar de un intptr_t es un error, y no deberíamos empeorar el ABI para acomodar así el código roto). Un progtwigdor que escribe int probablemente esperaba un tipo de 32 bits, ya que la mayoría de las plataformas funcionan de esa manera. (El estándar por supuesto solo garantiza 16 bits).

Como no hay ninguna expectativa de que int sea ​​de 64 bits en general (p. Ej., En plataformas de 32 bits), y hacerlo de 64 bits hará que algunos progtwigs se vuelvan más lentos (y casi ningún progtwig más rápido), int es de 32 bits en la mayoría de los ABI de 64 bits.

Además, debe haber un nombre para un tipo entero de 32 bits, para que int32_t sea ​​un typedef para.

Sí. int tamaño int depende del tamaño del comstackdor. Para un entero de 16 bits, el rango del entero está entre -32768 y 32767. Para comstackdor de 32 y 64 bits boostá.