GNU/Linux >> Tutoriales Linux >  >> Linux

¿Puedo suponer que el tamaño de long int es siempre de 4 bytes?

Los estándares no dicen nada sobre el tamaño exacto de cualquier tipo de entero además de char . Normalmente, long es de 32 bits en sistemas de 32 bits y de 64 bits en sistemas de 64 bits.

Sin embargo, el estándar especifica un mínimo Talla. De la sección 5.2.4.2.1 del Estándar C:

1 Los valores dados a continuación serán reemplazados por expresiones constantes adecuadas para usar en #if directivas de preprocesamiento. Además, a excepción de CHAR_BIT y MB_LEN_MAX , lo siguiente se reemplazará por expresiones que tengan el mismo tipo que tendría una expresión que es un objeto del tipo correspondiente convertido según las promociones de enteros. Sus valores definidos por la implementación serán iguales o mayores en magnitud (valor absoluto) a los mostrados, con el mismo signo.

...

  • valor mínimo para un objeto de tipo long int

    LONG_MIN -2147483647 // −(2^31−1)

  • valor máximo para un objeto de tipo long int

    LONG_MAX +2147483647 // 2^31−1

Esto dice que un long int debe tener un mínimo de 32 bits, pero puede ser mayor. En una máquina donde CHAR_BIT es 8, esto da un tamaño de byte mínimo de 4. Sin embargo, en una máquina con, p. CHAR_BIT igual a 16, un long int podría tener 2 bytes de longitud.

He aquí un ejemplo del mundo real. Para el siguiente código:

#include <stdio.h>

int main ()
{
    printf("sizeof(long) = %zu\n", sizeof(long));
    return 0;
}

Salida en Debian 7 i686:

tamaño de (largo) =4

Salida en CentOS 7 x64:

tamaño de (largo) =8

Así que no, no puedes hacer suposiciones sobre el tamaño. Si necesita un tipo de un tamaño específico, puede usar los tipos definidos en stdint.h . Define los siguientes tipos:

  • int8_t :firmado de 8 bits
  • uint8_t :8 bits sin firmar
  • int16_t :firmado de 16 bits
  • uint16_t :16 bits sin firmar
  • int32_t :firmado de 32 bits
  • uint32_t :32 bits sin firmar
  • int64_t :firmado de 64 bits
  • uint64_t :64 bits sin firmar

El stdint.h el encabezado se describe en la sección 7.20 del estándar, con tipos de ancho exacto en la sección 7.20.1.1. El estándar establece que estos typedefs son opcionales, pero existen en la mayoría de las implementaciones.


No, ni el estándar C ni POSIX garantizan esto y, de hecho, la mayoría de las plataformas de 64 bits similares a Unix tienen un long de 64 bits (8 bytes). .


Linux
  1. Error de OpenStack:el tamaño de la columna de índice es demasiado grande. El tamaño máximo de columna es de 767 bytes [Resuelto]

  2. ¿Qué tan grande es el amortiguador de tubería?

  3. Obtener el tamaño de la base de datos en MySQL

  4. ¿Cómo puedo ver el tamaño de los archivos y directorios en Linux?

  5. ¿Puedo expandir el tamaño de una imagen de disco basada en archivos?

Cómo obtener el tamaño de un directorio en Linux

Cómo encontrar el tamaño total de un directorio en Linux

¿Cómo encuentro el tamaño máximo de pila?

¿Cómo puedo *solo* obtener la cantidad de bytes disponibles en un disco en bash?

¿Por qué el tamaño de un directorio siempre es de 4096 bytes en Unix?

¿Por qué no puedo desplazarme en la terminal?