GNU/Linux >> Linux Esercitazione >  >> Linux

Posso presumere che la dimensione di long int sia sempre di 4 byte?

Gli standard non dicono nulla in merito alla dimensione esatta di qualsiasi tipo intero a parte char . Tipicamente, long è a 32 bit su sistemi a 32 bit e a 64 bit su sistemi a 64 bit.

Lo standard tuttavia specifica un minimo taglia. Dalla sezione 5.2.4.2.1 dello Standard C:

1 I valori forniti di seguito devono essere sostituiti da espressioni costanti adatte all'uso in #if direttive di preelaborazione. Inoltre, ad eccezione di CHAR_BIT e MB_LEN_MAX , quanto segue deve essere sostituito da espressioni che hanno lo stesso tipo di un'espressione che è un oggetto del tipo corrispondente convertito in base alle promozioni intere. I loro valori definiti dall'implementazione devono essere uguali o maggiori in grandezza (valore assoluto) a quelli mostrati, con lo stesso segno.

...

  • valore minimo per un oggetto di tipo long int

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

  • valore massimo per un oggetto di tipo long int

    LONG_MAX +2147483647 // 2^31−1

Questo dice che un long int deve essere un minimo di 32 bit, ma può essere maggiore. Su una macchina in cui CHAR_BIT è 8, questo fornisce una dimensione minima in byte di 4. Tuttavia su macchine con ad es. CHAR_BIT uguale a 16, un long int potrebbe essere lungo 2 byte.

Ecco un esempio del mondo reale. Per il seguente codice:

#include <stdio.h>

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

Output su Debian 7 i686:

sizeof(long) =4

Uscita su CentOS 7 x64:

sizeof(long) =8

Quindi no, non puoi fare ipotesi sulle dimensioni. Se hai bisogno di un tipo di una dimensione specifica, puoi utilizzare i tipi definiti in stdint.h . Definisce i seguenti tipi:

  • int8_t :firmato a 8 bit
  • uint8_t :8 bit senza segno
  • int16_t :firmato a 16 bit
  • uint16_t :16 bit senza segno
  • int32_t :firmato a 32 bit
  • uint32_t :32 bit senza segno
  • int64_t :firmato a 64 bit
  • uint64_t :64 bit senza segno

Il stdint.h l'intestazione è descritta nella sezione 7.20 dello standard, con tipi di larghezza esatti nella sezione 7.20.1.1. Lo standard afferma che questi typedef sono facoltativi, ma esistono nella maggior parte delle implementazioni.


No, né lo standard C né POSIX lo garantiscono e infatti la maggior parte delle piattaforme a 64 bit simili a Unix ha un long a 64 bit (8 byte) .


Linux
  1. C Tutorial di programmazione 4 - Variabili e memoria

  2. Errore OpenStack – Dimensioni della colonna dell'indice troppo grandi. La dimensione massima della colonna è 767 byte [Risolto]

  3. Come posso vedere la dimensione dei file e delle directory in Linux?

  4. Perché la dimensione di una directory è sempre di 4096 byte in unix?

  5. Perché non riesco a scorrere nel terminale?

Come ottenere la dimensione di una directory in Linux

Come trovare la dimensione totale di una directory in Linux

Come trovo la dimensione massima dello stack?

Come posso *solo* ottenere il numero di byte disponibili su un disco in bash?

Posso espandere le dimensioni di un'immagine disco basata su file?

Come posso determinare la dimensione corrente dell'ARC in ZFS e in che modo l'ARC si riferisce alla memoria libera o cache?