Come sottolineato da @delnan, le implementazioni POSIX mantengono le dimensioni di long
e int
come non specificato e spesso differiscono tra i sistemi a 32 bit e 64 bit.
La lunghezza del long
è in gran parte hardware correlati (spesso corrispondente alla dimensione dei registri dati della CPU e, talvolta, altri problemi relativi al software come la progettazione del sistema operativo e ABI interfacciamento).
Per semplificare la mente, sizeof
non è una funzione, ma una direttiva del compilatore *, quindi il codice non utilizza le operazioni quando si utilizza sizeof
- è lo stesso che scrivere un numero, solo che è portatile.
uso:
sizeof(long int)
* Come Dave sottolineato nei commenti, sizeof
sarà calcolato a runtime quando è impossibile calcolare il valore durante la compilazione, come quando si usa array di lunghezza variabile.
Inoltre, come indicato in un altro commento, sizeof
prende in considerazione il padding e l'allineamento utilizzati dall'implementazione, il che significa che i byte effettivi in uso potrebbero essere diversi dalla dimensione in memoria (questo potrebbe essere importante quando il bit shifting) .
Se si cercano variabili di dimensione byte specifiche, considerare l'utilizzo di una matrice di byte o (presumibilmente di essere supportati) i tipi definiti da C99 in stdint.h
, come suggerito da @ dbush.
Solo per ricordare a voi ragazzi che 'sizeof' prende in considerazione il riempimento e l'allineamento. È conforme allo standard avere un 'sizeof (unsigned long)' di 8 byte ma l'overflow si comporta come 4 byte. È sbagliato tentare di usare 'sizeof' e' CHAR_BITS' per calcolare il limite di un tipo intero. Usa 'limits.h' quando dovrebbe essere usato. – user3528438
Dovresti davvero leggere il (abbreviato prima, quindi la versione completa del) C-faq, che ha avuto origine su Usenet in un momento in cui era * il * luogo in cui le persone con conoscenza su un argomento si riunivano nello stesso luogo (ora, è diffuso tra diversi siti ...), e quindi ha portato a domande incredibilmente approfondite e ben fatte. Vedi http://c-faq.com/versions.html. Leggendolo si aprirà gli occhi su questa domanda e su dozzine in più probabilmente non sai nemmeno che devi ancora sapere (sezione 5 - puntatori nulli - è uno che contiene le FAQ Sono rimasto scioccato (e grato) a scoprire) –
no, è 8 sul mio pc – RiaD