Mi chiedevo il motivo per cui questo size_t
viene utilizzato dove posso dire say int type. Si dice che size_t
sia un tipo di ritorno dell'operatore sizeof
. Cosa significa? come se io usassi sizeof(int)
e memorizzassi il suo ritorno su una variabile di tipo int
, quindi funziona anche, non è necessario memorizzarlo in una variabile di tipo size_t
. Voglio solo sapere chiaramente il concetto di base di utilizzare size_t
con example.Thanks chiaramente comprensibiliqualcuno può spiegare perché il tipo size_t viene utilizzato con un esempio?
risposta
size_t
è garantito per essere in grado di rappresentare la dimensione più grande possibile, int
non è. Ciò significa che size_t
è più portatile.
Ad esempio, cosa succede se int
è in grado di memorizzare solo fino a 255 ma è possibile allocare array di 5000 byte? Chiaramente questo non avrebbe funzionato, tuttavia con lo size_t
lo farà.
Tecnicamente 'int' deve avere almeno 16 bit, come deve estendersi almeno all'intervallo [-32767..32767]. (Perché no -32768? Per sistemare i sistemi complemento e sign-and-magnitude, nel caso qualcuno voglia usare C su una vecchia macchina Univac. Ovviamente quelli hanno numeri interi a 18 e 36 bit, con 9 bit ' char'.) – torek
@torek Per qualche motivo ho l'impressione che int sia solo richiesto di essere> 16 in C, non in C++. Non ho comunque controllato lo standard. – Pubby
@Pubby: C++ eredita quello da C. 1.1 p2 C++ è un linguaggio di programmazione generico basato sul linguaggio di programmazione C come descritto in ISO/IEC 9899: 1999 Linguaggi di programmazione
–
L'esempio più semplice è piuttosto datato: su un vecchio sistema a 16 bit-int
con 64 k di RAM, il valore di un int
può essere ovunque da -32768 a +32767, ma dopo:
char buf[40960];
il buffer buf
occupa 40 kbyte, quindi sizeof buf
è troppo grande per rientrare in uno int
e ha bisogno di un unsigned int
.
La stessa cosa può accadere oggi se si utilizza 32 bit int
ma permette ai programmi di accedere a più di 4 GB di RAM alla volta, come è il caso in quelli che vengono chiamati modelli "I32LP64" (32 bit int
, 64 -bit long
e puntatore). Qui il tipo size_t
avrà lo stesso intervallo di unsigned long
.
E 'definita l'implementazione ma su sistemi a 64 bit troverete che size_t
è spesso a 64 bit mentre int
è ancora a 32 bit (a meno che non sia il modello ILP64 or SILP64).
a seconda dell'architettura in uso (16 bit, 32 bit o 64 bit) un int potrebbe avere una dimensione diversa.
se si desidera una dimensione specifica che uso uint16_t o uint32_t .... È possibile controllare questo thread per ulteriori informazioni
What does the C++ standard state the size of int, long type to be?
si utilizza size_t per lo più per la fusione puntatori in interi senza segno dello stesso dimensione, per eseguire calcoli sui puntatori come se fossero numeri interi, che altrimenti verrebbero impediti al momento della compilazione. Tale codice è pensato per compilare e compilare correttamente nel contesto di diverse dimensioni del puntatore, ad es. Modello a 32 bit contro 64 bit.
- 1. Qualcuno può spiegare namespace in javascript con un esempio?
- 2. Qualcuno può spiegare l'attr?
- 3. Qualcuno può spiegare MustOverride?
- 4. Qualcuno può spiegare RESULT_FIRST_USER
- 5. Qualcuno può spiegare docker.sock
- 6. Qualcuno può spiegare il "trucco degli indici"?
- 7. Qualcuno può spiegare come viene utilizzato il simbolo "=>" in Scala
- 8. Qualcuno può spiegare eclipse.p2.profile
- 9. Qualcuno può spiegare il comportamento di "conj"?
- 10. Qualcuno può spiegare strani JavaScript con oggetti?
- 11. Qualcuno può spiegare Microsoft Unity?
- 12. Qualcuno potrebbe spiegare il seguente esempio di os.fork()?
- 13. Qualcuno può spiegare come funziona?
- 14. qualcuno può spiegare questo polyray di array.prototype.find()?
- 15. Qualcuno può spiegare l'overflow in C# usando il binario?
- 16. Qualcuno può spiegare, perché "git status" tocca la directory .git?
- 17. Qualcuno può spiegare perché si trova in jQuery UI Datepicker?
- 18. Qualcuno può spiegare il significato di ((.) $ (.)) (==) 1 (1+) 0
- 19. Qualcuno può spiegare questo frammento (perché queste parentesi qui)?
- 20. wierdness using tee: qualcuno può spiegare?
- 21. qualcuno può spiegare a me questa `StaleDataException`
- 22. Qualcuno può spiegare questo codice java
- 23. Qualcuno può spiegare le chiavi esterne MySQL
- 24. perché usare la variabile @ before. qualcuno può spiegare pls
- 25. Qualcuno può spiegare meglio Decoder/Encoder?
- 26. Qualcuno può spiegare questo trucco "doppio negativo"?
- 27. Qualcuno può spiegare le reti neurali artificiali?
- 28. Qualcuno può spiegare questo filtro regex di un array
- 29. Qualcuno potrebbe spiegare LDAP?
- 30. Qualcuno può spiegare questo codice C?
È possibile utilizzare un int per memorizzare il ritorno di sizeof nello stesso modo in cui a volte è possibile memorizzare 2147483647 in un file int. Accade solo che le dimensioni specifiche dell'implementazione corrispondano correttamente. – Lalaland
Vedi anche questa domanda: http://stackoverflow.com/questions/918787/whats-sizeofsize-t-on-32-bit-vs-the-various-64-bit-data-models – ChrisWue
Qualcuno può confermare che size_t è la stessa dimensione dei registri del processore? – arthurprs