Zastanawiam się, dlaczego ten size_t
jest używany, gdzie mogę użyć powiedzieć typu int. Mówi się, że size_t
jest typem zwrotnym operatora sizeof
. Co to znaczy? tak jak jeśli użyję sizeof(int)
i zapiszę, jaki jest jego powrót do zmiennej typu int
, to również działa, nie jest konieczne przechowywanie jej w zmiennej typu size_t
. Właśnie wyraźnie chcą znać podstawowe pojęcia z użyciem size_t
z wyraźną example.Thanksmoże ktoś wyjaśnić, dlaczego typ size_t jest używany z przykładem?
Odpowiedz
size_t
jest gwarantowane, aby móc reprezentować największy rozmiar to możliwe, int
nie jest. Oznacza to, że size_t
jest bardziej przenośny.
Na przykład, co jeśli int
może przechowywać tylko do 255, ale można przydzielić tablice 5000 bajtów? Najwyraźniej to by nie działało, ale będzie to miało miejsce z size_t
.
Technicznie "int" musi mieć co najmniej 16 bitów, jak musi wynosić co najmniej zakres [-32767..32767]. (Dlaczego nie -32768? Aby dopasować swoje systemy uzupełniania i znakowania do wielkości, na wypadek, gdyby ktoś chciał używać C na starej maszynie Univac, oczywiście mają one 18- i 36-bitowe liczby całkowite, z 9-bitowymi '' '' ' char''.) – torek
@torek Z jakiegoś powodu mam wrażenie, że int musi być> 16 w C, nie w C++. Nie sprawdziłem jednak standardu. – Pubby
@Pubby: C++ dziedziczy, że z C. 1.1 p2 C++ jest językiem programowania ogólnego przeznaczenia opartym na języku programowania C opisanym w ISO/IEC 9899: 1999 Języki programowania
–
Najprostszym przykładem jest dość dnia: w systemie starej 16-bitowo int
z 64 K pamięci RAM, wartość składnika int
może być wszędzie od -32768 do +32767, ale po:
char buf[40960];
Bufor buf
zajmuje 40 KB, więc sizeof buf
jest zbyt duży, aby zmieścić się w int
i potrzebuje unsigned int
.
To samo może zdarzyć się dzisiaj, jeśli używasz 32-bitowej int
ale pozwalają programom na dostęp do więcej niż 4 GB pamięci RAM na raz, jak to ma miejsce na tak zwane modele „I32LP64” (32 bit int
, 64 -bit long
i wskaźnik). Tutaj typ size_t
będzie miał taki sam zakres, jak unsigned long
.
Jest to implementacja zdefiniowana, ale na systemach 64-bitowych okaże się, że size_t
jest często 64-bitowy, podczas gdy int
jest nadal 32-bitowy (chyba że jest to model ILP64 or SILP64).
w zależności od architektury (16-bit, 32-bit lub 64-bit) int może mieć inny rozmiar.
jeśli chcesz konkretnej wielkości używam uint16_t lub uint32_t .... Możesz sprawdzić ten wątek, aby uzyskać więcej informacji
What does the C++ standard state the size of int, long type to be?
można wykorzystać size_t głównie do odlewania wskaźniki do liczb całkowitych bez znaku tego samego size, aby wykonywać obliczenia na wskaźnikach tak, jakby były liczbami całkowitymi, które w przeciwnym razie byłyby uniemożliwione podczas kompilacji. Taki kod jest przeznaczony do kompilowania i budowania poprawnie w kontekście różnych rozmiarów wskaźników, np. Model 32-bitowy a 64-bitowy.
- 1. Czy ktoś może wyjaśnić składnię związaną z tym przykładem require.js?
- 2. Czy ktoś może wyjaśnić OAuth?
- 3. Czy ktoś może wyjaśnić attr?
- 4. dlaczego warto korzystać z zmiennej @ before. może ktoś pls wyjaśnić
- 5. Czy ktoś może mi wyjaśnić metody anonimowe?
- 6. Czy ktoś może wyjaśnić kodowanie Unicode Gsona?
- 7. Czy ktoś może wyjaśnić, jak/dlaczego używać haków CSS jQuery?
- 8. Czy ktoś może wyjaśnić paradoks Class.superclass.class.superclass?
- 9. Czy ktoś może wyjaśnić, dlaczego to sortowanie nie zadziała?
- 10. Czy ktoś może lepiej wyjaśnić Dekodery/Enkodery?
- 11. Czy ktoś może mi wyjaśnić MVC?
- 12. Czy ktoś może wyjaśnić tę metodę Javascript?
- 13. Czy ktoś może wyjaśnić, jak to działa?
- 14. Czy ktoś może wyjaśnić ten kod C?
- 15. Czy ktoś może wyjaśnić atrybut aria- * HTML5?
- 16. Sql injection może ktoś wyjaśnić mi ten kod
- 17. Czy ktoś może wyjaśnić laikiem, czym jest język funkcyjny?
- 18. Czy ktoś może wyjaśnić deklarację tych ogólnych metod java?
- 19. Czy ktoś może mi wyjaśnić, co robi ta metoda GetCardinality?
- 20. Czy ktoś może wyjaśnić mi ten naprawdę podstawowy kod Pythona?
- 21. Czy ktoś może wyjaśnić te kilka linii MSIL?
- 22. Czy ktoś może wyjaśnić różne implementacje pamięci podręcznej Perla?
- 23. Czy ktoś może mi wyjaśnić operacje bitowe ARM?
- 24. Może ktoś wyjaśnić mi ten JavaScript Object "kopia" zachowanie
- 25. Python Deprecation Ostrzeżenia z Monostate __new__ - Czy ktoś może wyjaśnić, dlaczego?
- 26. Czy ktoś może wyjaśnić "i-x-apple-msg-load: //"?
- 27. Czy ktoś może mi wyjaśnić klasę << jaźń?
- 28. Czy ktoś może wyjaśnić, co oznaczają te wyniki ApacheBench?
- 29. Czy ktoś może mi wyjaśnić, jak używać pojemników IOC?
- 30. Czy ktoś może wyjaśnić system routingu Kohana 3?
Możesz użyć int do przechowywania zwrotu sizeof w taki sam sposób, w jaki czasami możesz przechowywać 2147483647 w int. Tak się składa, że rozmiary właściwe dla danej implementacji są poprawne. – Lalaland
Zobacz także to pytanie: http://stackoverflow.com/questions/918787/whats-sizeofsize-t-on-32-bit-vs-the-various-64-bit-data-models – ChrisWue
Czy ktoś może potwierdzić, że size_t jest taki sam rozmiar rejestrów procesorów? – arthurprs