Aplikacje 32 i 64 bitowe

Aplikacje 32 i 64 bitowe
ZK
  • Rejestracja:prawie 7 lat
  • Ostatnio:5 miesięcy
  • Postów:273
0

Mam pytanie . Czy programy c# 64 bitowe szybciej działają?
. Czy ktoś to kiedyś sprawdzał , Ja wiem tylko tyle że potrzebują większej ilości pamięci bo używają 64 bitowych adresów .

mr_jaro
  • Rejestracja:prawie 14 lat
  • Ostatnio:ponad 3 lata
  • Lokalizacja:Grudziądz/Bydgoszcz
  • Postów:5300
1

tak pracują szybciej, przy małych apkach tego nie odczujesz ale im większe tym bardziej jest to odczuwalne. Z racji tego, że nasze komputery i systemy są x64, apki 32 bitowe są wirtualizowane.


It's All About the Game.
Patryk27
Wirtualizowane? 64-bitowe procesory przecież natywne odpalają kod 32-bitowy.
Azarien
@Patryk27: ale kernel Windowsa i sterowniki działają w trybie 64-bitowym, więc aplikacje 32-bitowe potrzebują dodatkowej warstwy pośredniczącej. zawsze to ileś cykli więcej na każdym przerwaniu i każdym syscallu.
Azarien
jeśli system jest 32-bitowy to oczywiście tego narzutu nie ma. w praktyce to może być różnica jakiegoś pojedynczego fps-a w grze.
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 19 godzin
4
mr_jaro napisał(a):

tak pracują szybciej, przy małych apkach tego nie odczujesz ale im większe tym bardziej jest to odczuwalne.

Masz jakieś pomiary?

Bo z tego co kiedyś widziałem (z pewnością to już naprawili) takie Math.Pow() było w wersji 64-bitowej kilkakrotnie wolniejsze.

W praktyce (nie licząc takich oczywistych wpadek) nie oczekiwałbym żadnej odczuwalnej różnicy w normalnym programie.

Z racji tego, że nasze komputery i systemy są x64,

Nasze, czyli czyje, bo piszę te słowa z 32-bitowego systemu...

apki 32 bitowe są wirtualizowane.

To mógł być argument kilkanaście lat temu - dodatkowy narzut na 32-bitowe aplikacje w 64-bitowym systemie jest raczej pomijalny.

Spodziewałbym się istotnej różnicy na korzyść 64 bitów praktycznie tylko tam, gdzie do obliczeń są wykorzystywane 64-bitowe inty, które nie będą musiały być składane z dwóch 32-bitowych liczb, co rzeczywiście jest wolniejsze.

AF
  • Rejestracja:prawie 18 lat
  • Ostatnio:około 2 miesiące
1

Czysto teoretycznie architektura x86_64 ma więcej rejestrów, więc kod może być krótszy i przez to szybszy. W praktyce bywa różnie, przykładowo autorzy Visual Studio nie chcą robić wersji 64-bitowej, bo według ich analiz nie ma przyspieszenia — nie oceniam, jak jest w rzeczywistości, ale z pewnością bez pomiarów się nie obejdzie.

vpiotr
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
1

Ludzie mają różne zabytki. Ja mam np. na strychu kompa z 48k RAMu.

Przydatne linki:
https://docs.microsoft.com/pl-pl/dotnet/framework/64-bit-apps
https://www.codeguru.com/csharp/.net/article.php/c16921/Understanding-NET-application-options-for-32-and-64bit-systems.htm

To czym bym się głównie martwił to limit 2 GB RAM. Na dzisiejsze czasy to naprawdę osiągalny pułap (chyba że liczysz miejsca zerowe paraboli).

Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 19 godzin
1

Tak, x86_64 ma więcej rejestrów, co jest dużym ułatwieniem dla… piszących w asemblerze. Hura :]
Niestety, większe wskaźniki oraz dodatkowe prefiksy instrukcji powodują że kod jest średnio dłuższy, zajmuje więcej cache procesora (jak duży by on nie był) co przynajmniej częściowo zjada zyski związane z większymi rejestrami i większą ich ilością.
Wystarczy porównać rozmiar exeka 32-bitowego i 64-bitowego tego samego programu. Zawsze jest różnica kilku-kilkunastu procent.

ZK
  • Rejestracja:prawie 7 lat
  • Ostatnio:5 miesięcy
  • Postów:273
0

Różnicy w kodzie IL nie zauważyłem tylko wielkość obiektów na zarządzanej stercie jest większa .
Domyślnie w Visual Studio są 32 bity jeśli się nie mylę .
Zastanawiałem się co nam daje tak realnie włącznie trybu 64 bity .Chodzi mi wyłącznie o taki kod zarządzany C# .i środowisko uruchomieniowe CLR.
Czy są może jakieś publikacje w necie na ten temat

Jeszcze jedna ciekawa rzecz. Może ja się nie znam do końca . Any CPU w 64 bitowym Windowsie działa w trybie 32 bity . Według MSDN powinno być w trybie 64 bity .
Widzę po wielkości adresów .
Dzięki za wszystkie wcześniejsze odpowiedzi .

edytowany 3x, ostatnio: Zimny Krawiec
Azarien
przecież to ten sam IL, różnica jest dopiero po konwersji na kod wykonywalny…
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 19 godzin
1
Zimny Krawiec napisał(a):

Jeszcze jedna ciekawa rzecz. Może ja się nie znam do końca . Any CPU w 64 bitowym Windowsie działa w trybie 32 bity . Według MSDN powinno być w trybie 64 bity .

Oprócz Any CPU jest jeszcze ustawienie "prefer 32-bit", które jest chyba domyślnie włączone.

AF
  • Rejestracja:prawie 18 lat
  • Ostatnio:około 2 miesiące
1

AnyCPU zadziała tak, jaka jest fizyczna architektura. Any CPU + prefer 32 bit zawsze działa jako w 32 bitach, różni się od x86 tym, że działa też na ARM-ie.

ZK
  • Rejestracja:prawie 7 lat
  • Ostatnio:5 miesięcy
  • Postów:273
0

Sprawdziłem . Jest dokładnie tak jak mówicie . Thanks !

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.