2013-04-11 15 views
6

To jest podstawowa wątpliwość, którą mam. Nie jestem facetem z IT ani CS, więc spróbuj wyjaśnić w prostym języku. Dlaczego teraz zadaję to pytanie, ponieważ możemy uruchamiać aplikacje 32-bitowe w 64-bitowych systemach operacyjnych 64 &. AFAIK typy danych dla 64 bitów pobierają podwójną ilość pamięci niż aplikacje 32-bitowe. Również 64-bitowe aplikacje mogą działać tylko w 64-bitowych systemach operacyjnych. Dlaczego więc podjąć trud tworzenia aplikacji 64-bitowych? Być może dlatego Firefox jest dostępny tylko w wersji 32-bitowej ??? Przepraszam, jeśli to pytanie nie jest zgodne z normami SO, ale nie mogę kontrolować przestań myśleć o tym samym. Dziękuję.Dlaczego powinniśmy budować 64-bitowe obiekty docelowe dla aplikacji C++?

AKTUALIZACJA: Wydaje się, że jest to zamieszanie. Nie zamierzałem pytać, dlaczego potrzebujemy maszyny architektury 64-bitowej. Wiem, że maszyny 32-bitowe mogą korzystać tylko z 4-GB pamięci RAM. Komputery z procesorem 64-bitowym mają znacznie wyższy limit. Pytałem, dlaczego potrzebujemy zbudować aplikacje 64-bitowe!

+0

Czy próbowałeś kiedyś przydzielić 150GiB pamięci RAM w procesie 32-bitowym? – PlasmaHH

+4

64-bitowe aplikacje mogą uzyskać dostęp do większej ilości pamięci. Jest to ważne dla niektórych aplikacji, a nie dla innych. – john

+0

@PlasmaHH czym jest GiB? czy jest to związane z Giga Bajtami (GB)? –

Odpowiedz

10

Oprócz powyższych przyczyn (głównie "z wykorzystaniem ponad 2-3 GB pamięci"), powodem kompilacji dla wersji 64-bitowej jest to, że x86-64 ma 16 rejestrów, gdzie x86-32 ma 8. jednym z tych rejestrów jest aplikator i często rBP jest zarezerwowany dla "framepointer", faktyczna liczba użytecznych rejestrów wynosi odpowiednio 6 i 14. Dodatkowe rejestry pozwalają, na przykład, na większą liczbę parametrów przekazywanych w rejestrach i większą liczbę zmiennych tymczasowych przechowywanych w rejestrach w ramach funkcji. Ma to pozytywny wpływ na rzeczywistą prędkość wykonywania kodu, ponieważ za każdym razem, gdy zamiast rejestru używa się pamięci, CO NAJMNIEJ prowadzi do bardziej złożonej instrukcji, a często do użycia dodatkowej instrukcji. To z kolei powoduje, że kod jest większy, gdy nie ma wystarczającej liczby rejestrów.

Ogólnie 64-bitowy kod x86 działa o 5-15% szybciej bez modyfikacji rzeczywistych algorytmów i zazwyczaj ma. Czasami algorytmy mogą być zmieniane, aby uzyskać znacznie więcej [ponieważ na przykład możesz mieć tablicę, która jest indeksowana przez "numer telefonu", zamiast mieszać numer telefonu, a następnie indeksować na mieszanie, lub zamiast tego używać 64-bitowych wartości całkowitych 32-bitowych, co oznacza przyspieszenie 2x dla "połowy tylu operacji"].

Jeśli wymagana jest wydajność z poziomu aplikacji, należy przeprowadzić test porównawczy (na wielu platformach). Są sytuacje, w których na przykład większe wskaźniki oznaczają, że pamięć podręczna staje się szybsza, a kod kończy się wolniej, ponieważ "tylko połowa wpisów w liście łączy się w pamięci podręcznej".

Krótko mówiąc: w większości przypadków aplikacje 64-bitowe są szybsze niż aplikacje 32-bitowe i robią to samo.

+0

32-bitowe aplikacje mogą uzyskać dostęp do 4 GB w oknach 64-bitowych za pomocą przełącznika \ LARGEADDRESSAWARE: http://support.microsoft.com/default.aspx?scid=889654 – EdChum

+1

I mają dostęp do ponad 4 GB za pomocą [AWE] (http: //msdn.microsoft.com/en-us/library/windows/desktop/aa366527(v=vs.85).aspx) – dyp

+1

Tak, oba te są prawdziwe (cóż, jest to "Tylko poniżej 4 GB", ale dla wszystkich intencje i cele to 4 GB). AWE nie daje ci jednej dużej bryły pamięci, ale kod musi przeskakiwać przez obręcze, aby użyć pamięci, co nie jest dobrym rozwiązaniem. –

6

Najważniejszym przypadkiem jest, gdy naprawdę chcesz zużywać więcej niż 2 gigabajty pamięci na proces.

Kolejną rzeczą jest to, że wsparcie 32-bitowe będzie powoli spadać, tak jak nie zobaczysz teraz wielu aplikacji 16-bitowych. Jest to jednak powolny proces. Obecnie istnieje jedna wersja systemu Windows Server 2008, która domyślnie nie obsługuje standardu 32-bitowego.

I na koniec czasami po prostu trzeba być 64-bitowym - to jest kiedy budujesz rozszerzenie dowolnego rodzaju, które jest ładowane do 64-bitowego procesu konsumenckiego. Ponieważ 64-bitowe procesy nie mogą załadować kodu 32-bitowego, musisz dostarczyć 64-bitowe rozszerzenie dla nich lub stworzyć rozwiązanie międzyoperacyjne, aby twój kod był w oddzielnym procesie - ten ostatni nie zawsze jest możliwy i czasami jest bardzo nieefektywny.

+0

Dziękuję za twoją prostą odpowiedź, tak jak prosiłem. Jednak nie mogłem zrozumieć trzeciego akapitu. –

+0

@Cool_Coder: Które rzeczy dokładnie nie rozumiesz? – sharptooth

+0

32-bitowe aplikacje mogą uzyskać dostęp do 4 GB w oknach 64-bitowych za pomocą przełącznika \ LARGEADDRESSAWARE: http://support.microsoft.com/default.aspx?scid = 889654 – EdChum

4
  • Pamięć fizyczna

32-bitowa architektura systemu mogą bezpośrednio zająć tylko przestrzeń adresową 4 GB. 64-bitowa architektura systemu z 64-bitową wersją systemu Windows Server może obsługiwać do 1024 GB pamięci fizycznej i adresowalnej.

  • Lepsze przetwarzanie równoległe

Serwer, który wykorzystuje 32-bitową architekturę jest ograniczona (Windows OS) do 32 procesorów. Udoskonalenia w przetwarzaniu równoległym i architekturach magistrali umożliwiają 64-bitowym środowiskom obsługę aż 64 procesorów i zapewniają prawie liniową skalowalność z każdym dodatkowym procesorem.

  • szybciej architekturę magistrali

64-bitowa architektura stanowi coraz szersze rejestry ogólnego przeznaczenia, które przyczyniają się do zwiększenia ogólnej szybkości pracy. Gdy jest więcej rejestrów, mniej jest potrzeba zapisywania trwałych danych w pamięci, a następnie trzeba je odczytać z powrotem tylko kilka instrukcji później. Wywołania funkcji są również szybsze w środowisku 64-bitowym, ponieważ w rejestrach można przekazać aż cztery argumenty na raz.

+0

Emmm ... Dlaczego 32-bitowy serwer jest ograniczony do 32 procesorów, zastanawiam się? – sharptooth

+1

Znalazłem go tutaj: http://technet.microsoft.com/en-us/library/dd630755%28v=office.12%29.aspx – duDE

+0

To niektóre ograniczenia specyficzne dla systemu Windows. – sharptooth

1

Wielkość typów danych nie podwaja się automatycznie z x64, ale rozmiar procesorów jest rejestrowany, podobnie jak rozmiar wskaźnika.Dzięki 32 bitom możesz adresować 4294967295 bajtów pamięci (~ 4 GB), co nie jest możliwe w przypadku niektórych aplikacji (takich jak systemy zarządzania bazami danych, ...).

Firefox jest dostępny tylko w wersji 32-bitowej ze względu na problemy ze zgodnością. Nie można pisać bibliotek dla architektur x86 (32-bitowych) i wywoływać ich z procesorów x64, ponieważ ich wskaźniki są niezgodne (jak opisano powyżej). Tworzenie obu: x64 i Wersje x86 zwiększają koszty testów. Jeśli twoja aplikacja rzadko używa więcej niż 3,5 GB pamięci, to w rzeczywistości nie korzysta z architektury x64.

Również 32-bitowe programy nie mogą po prostu działać na architekturach x64. W systemie Windows jest na to warstwa o nazwie Windows on Windows (WoW) lub WoW64 dla interfejsów x64/x86. Przez różne przypadki buforowania może się również zdarzyć, że aplikacja x86 działa szybciej w WoW niż natywna aplikacja x64, robiąc to samo.

+0

Hej @Aschratt dzięki za te informacje, nie wiedziałem o tym. Czy system Windows ma tę specjalność tylko do uruchamiania aplikacji 32-bitowych w 64-bitowym systemie operacyjnym? Czy 64-bitowy system Ubuntu nie uruchamia 32-bitowych aplikacji domyślnie. Pytam, bo nie wiem. –

+0

Nie wiem, czy Linux (lub Ubuntu) ma taką warstwę abstrakcji. Zasadniczo WoW64 "symuluje" procesor x86 do procesu x86. Nie jest to trudne, ponieważ większość kodów jest taka sama, wystarczy naprawić wskaźniki. Myślę, że jest coś podobnego do Ubuntu, ale naprawdę nie wiem. – Carsten

Powiązane problemy