16 bit Int vs 32 bit Int vs 64 bit Int

Zastanawiałem się nad tym od dłuższego czasu, ponieważ nigdy nie miałem "formalnej" edukacji z informatyki( jestem w liceum), więc proszę wybaczyć moją ignorancję w tym temacie.

Na platformie obsługującej trzy typy liczb całkowitych wymienione w tytule, która z nich jest lepsza i dlaczego? (Wiem, że każdy rodzaj int ma inną długość w pamięci, ale nie jestem pewien, co to oznacza lub jak wpływa na wydajność lub, z punktu widzenia dewelopera, który z nich ma więcej zalet w stosunku do inne).

Z góry dziękuję za pomoc.

Author: ArturoVM, 2011-04-28

4 answers

"lepiej" jest terminem subiektywnym, ale niektóre liczby całkowite są bardziej wydajne na niektórych platformach.

Na przykład, w 32-bitowym komputerze (takim jak 32-bit platform i Win32) procesor jest zoptymalizowany do obsługi wartości 32-bitowej na raz, a 32 odnosi się do liczby bitów, które procesor może zużywać lub produkować w jednym cyklu. (Jest to naprawdę uproszczone wyjaśnienie, ale przenosi ogólną ideę).

W 64-bitowym komputerze (najnowsze procesory AMD i Intel należy do tej kategorii), procesor jest zoptymalizowany do obsługi wartości 64-bitowych na raz.

Tak więc, na platformie 32-bitowej, 16-bitowa liczba całkowita załadowana na adres 32-bitowy musiałaby mieć 16 bitów wyzerowanych, aby procesor mógł na niej działać; 32-bitowa liczba całkowita byłaby natychmiast użyteczna bez żadnych zmian, a 64-bitowa liczba całkowita musiałaby być obsługiwana w dwóch lub więcej cyklach procesora (raz dla niskich 32-bitów, a potem ponownie dla wysokich 32-bitów).

Odwrotnie, na platformie 64-bitowej, 16-bitowe liczby całkowite muszą mieć zerowane 48 bitów, 32-bitowe liczby całkowite muszą mieć zerowane 32 bity, a 64-bitowe liczby całkowite mogą być natychmiast obsługiwane.

[[0]}Każda platforma i procesor mają "natywną" bit-ness (jak 32 lub 64), a to zwykle ogranicza niektóre inne zasoby, które mogą być dostępne przez ten procesor (na przykład ograniczenie pamięci 3GB/4GB procesorów 32-bitowych). Procesory z rodziny procesorów 80386 (a później x86) stały się 32-bitową normą, ale teraz takie firmy jak AMD i wtedy Intel obecnie robi 64-bitową normę.
 22
Author: M. Shawn Dillon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-28 01:11:20

Aby odpowiedzieć na pierwsze pytanie, użycie 16-bitowej vs 32-bitowej vs 64-bitowej liczby całkowitej zależy od używanego kontekstu. Dlatego nie można powiedzieć, że jedno jest lepsze od drugiego. Jednak w zależności od sytuacji preferowane jest używanie jednego nad drugim. Rozważ ten przykład. Załóżmy, że masz bazę danych z 10 milionami użytkowników i chcesz przechowywać rok, w którym się urodzili. Jeśli utworzysz pole w bazie danych z 64-bitową liczbą całkowitą, wyczerpałeś 80 megabajtów pamięci masowej; mając na uwadze, że jeśli użyjesz pola 16-bitowego, tylko 20 megabajtów pamięci zostanie wykorzystane. Możesz użyć pola 16-bitowego, ponieważ rok urodzenia jest mniejszy niż największa liczba 16-bitowa. Innymi słowy 1980, 1990, 1991

 8
Author: WindsurferOak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-28 01:14:07

Prostą odpowiedzią jest użycie najmniejszego, o którym wiesz, że będzie bezpieczny dla zakresu możliwych wartości, które będzie zawierał.

Jeśli wiesz, że możliwe wartości są ograniczone tak, aby były mniejsze niż 16-bitowa liczba całkowita o maksymalnej długości (np. wartość odpowiadająca dzieńowi roku - zawsze

Inne puszki prawdopodobnie daje lepsze poczucie zalet wydajności w zależności od tego, jakiego języka programowania używasz, ale mniejsze typy zużywają mniej pamięci i dlatego są "lepsze" w użyciu, jeśli nie potrzebujesz większych.

Dla odniesienia, 16-bitowa liczba całkowita oznacza, że możliwe są 2^16 wartości-ogólnie reprezentowane jako od 0 do 65,535. 32-bitowe wartości rosną do 2^32 lub nieco ponad 4,29 miliarda wartości.

To pytanie na 32-bitowych procesorach, jest typem "integer" bardziej wydajnym niż "Krótki" Typ? może dodać więcej dobrych informacji.

 4
Author: nycdan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:10:26

To zależy od tego, czy należy zoptymalizować szybkość czy pamięć masową. Jeśli interesuje Cię szybkość i używasz SQL Server w trybie 64-bitowym, 64-bitowe klucze są tym, czego potrzebujesz. 64-bitowy procesor działający w trybie 64-bitowym, jest zoptymalizowany do korzystania z 64-bitowych numerów i adresów. Podobnie, 64-bitowy procesor działający w trybie 32-bitowym jest zoptymalizowany do korzystania z 32-bitowych numerów i adresów. Na przykład, w trybie 64 bitowym, wszystkie naciśnięcia i wyskakuje na stosie są 8 bajtów itp. Również pobieranie z pamięci podręcznej i pamięci są ponownie zoptymalizowany dla numerów i adresów 64-bitowych. Procesor, działający w trybie 64-bitowym, może potrzebować więcej cykli maszynowych, aby obsłużyć numer 32-bitowy podobnie jak procesor, działający w trybie 32-bitowym potrzebuje więcej cykli maszynowych, aby obsłużyć numer 16-bitowy. Wydłużenie czasu przetwarzania następuje z wielu powodów, ale wystarczy pomyśleć o przykładzie wyrównania pamięci: liczba 32-bitowa może nie być wyrównana na 64-bitowej integralnej granicy, co oznacza, że ładowanie liczby wymaga przesunięcia i zamaskowania liczby po wczytaniu go do rejestru. Co najmniej każdy 32-bitowy numer musi być maskowany przed każdą operacją. Mówimy o zmniejszeniu efektywnej prędkości procesora o połowę podczas obsługi 32 lub 16-bitowych liczb całkowitych w trybie 64-bitowym.

 1
Author: Jack D Menendez,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-22 17:45:18