Behöver du mer RAM för att köra 32-bitars program på 64-bitars Windows?

Behöver du mer RAM för att köra 32-bitars program på 64-bitars Windows? / Fråga experterna

De flesta datorer levereras idag med en 64-bitarsversion av Windows, och ofta en minimal mängd RAM. Detta medför ifrågasätta hur bra dessa system fungerar. Detta gäller speciellt när användare vill köra sina äldre 32-bitars programvara på dessa nya datorer.

Vilket väcker en intressant fråga. Behöver du mer eller mindre RAM Hur mycket RAM behöver du verkligen? Hur mycket RAM behöver du verkligen? RAM är som kort sikt minne. Ju mer du multitask, desto mer behöver du. Ta reda på hur mycket din dator har, hur du får ut det mesta eller hur du får mer. Läs mer för att köra en 32-bitars applikation på en 64-bitarsversion av Windows Vad är 64-bitars dator? Vad är 64-bitars dator? Förpackningen av en dator eller datormaskinvara är trångt med tekniska termer och märken. En av de mer framstående är 64-bitars. Läs mer ? Den här veckan finner Bruce Epper ut.

En läsare frågar:

Är det sant att kör 32-bitars apps på ett 64-bitars Windows-system konsumerar 1,5 gånger mer minne jämfört med att köra 32-bitars app under ett 32-bitars Windows-operativsystem?

Bruces svar:

Vi har tidigare diskuterat fördelar och nackdelar med att hålla allt 64-bitars över hela linjen och några av effekterna av “blandning och matchning” Hur Windows-prestanda påverkas av hårdvara och programvara Hur Windows-prestanda påverkas av hårdvara och programvara I teorin kan 32-bitars programvara överträffa 64-bitars motsvarighet beroende på maskinvaruinstallationen. Låter komplicerat? Vi är här för att få mening och hjälpa dig att få bästa möjliga prestanda ur ditt system. Läs mer . Idag ska vi undersöka hur 32-bitars program körs på 64-bitars versioner av Windows.

Ett 64-bitars Windows-operativsystem kan inte köra ett 32-bitars Windows-program utan ytterligare hjälp. De är bara för olika: från pekare och datatyper, till hur systemet samtalar (hur program använder resurserna i det underliggande operativsystemet). Du behöver något sätt för att göra dem kompatibla.

Förstå WoW64

Windows använder delsystemet WoW64 (Windows32 on Windows64) för att kompensera för skillnaderna. Det fungerar effektivt som en 32-bitars Windows mini-emulator på x64-system och en fullfjädrad emulator på Itanium (IA64) system.

IA64-system kräver en fullständig emulator på grund av skillnaderna i processorinstruktioner och minnessidestorlekar (4K i x86 och x64, 8K i IA64). Eftersom x64-processorerna har alla instruktioner från x86-processorerna och använder samma minnessidestorlek, behöver den inte en full emulator.

I båda fallen tillhandahåller WoW64 ett gränssnitt mellan 64-bitars Windows-kärnan och 32-bitarsversionen av ntdll.dll (den innehåller en lista över de centrala Windows-kärnfunktionerna), avlyssnar kärnanrop och ändrar dem så att de kan bearbetas av de inbyggda 64-bitarsfunktionerna som tillhandahålls av Windows-kärnan.

Det finns 3 DLL-filer som används på x64 / IA64-system för att uppnå detta: wow64cpu.dll, wow64win.dll och wow64.dll. Deras funktioner är att abstrahera processorns egenskaper och tillhandahålla dunkar (vi kommer senare till dem) till win32k.sys som tillhandahåller “fönster” funktionalitet och ntoskrnl.exe som innehåller verkställande, kärnan, minneshanteraren, processschemaläggaren (inte förväxlas med Aktivitetsschemaläggaren tillgänglig från kontrollpanelen) och andra kärnelement i operativsystemet.

En thunk är en subrutin (Tänk på dessa som en serie instruktioner som utför en enda uppgift) som tillåter ett program att utföra en gemensam subrutin eller funktion i systemet.

I det här fallet extraheras argumenten från 32-bitars programstapel, omvandlar dem till 64-bitars motsvarigheter, och gör 64-bitars systemsamtal. Vid återkomst från samtalet kommer det att konvertera 64-bitarsresultaten tillbaka till 32 bitar och trycka dem tillbaka på programmets samtalstack för att den som ringer ska använda.

All thunking görs i användarläge (som har begränsade behörigheter) av två skäl. För det första minimerar man effekterna av fel i koden som kan leda till ett säkerhetshål, datakorruption eller en systemkrasch om den körs i kärnläge.

För det andra minskar den prestationspåverkan det skulle ha om den körs i kärnläge (det läge som används av de väsentliga delarna av operativsystemet) på grund av det omkostnader som är inblandade när man byter mellan användarläge och kärnläge och tillbaka.

Att gå tillbaka till Itanium-system, det finns några andra viktiga skillnader att notera. IA64-system använder två ytterligare filer. IA32exec.bin är x86-programvarutemulatorn och Wowia32x.dll ger gränssnittet mellan WoW64 och programvarutemulatorn.

En 32-bitarsprocess laddar dessa filer såväl som 64-bitarsversionen av ntdll.dll. Det här är de enda 64-bitars binärerna som kan laddas i en 32-bitars process före Windows 7. Windows 7 och senare har också en annan DLL, apisetschema.dll, som laddas in i alla processer.

När en 32-bitars process startas laddar den Wow64.dll som i sin tur laddar 32-bitarsversionen av ntdll.dll och alla nödvändiga 32-bitars DLL-filer från % System% \ SysWOW64. De flesta av dessa filer är identiska med binärerna på ett 32-bitars system, även om vissa har skrivits om för att fungera olika enligt WOW64.

Om vi ​​tittar på listan över DLL-filer som vi kan se finns det 9 DLL-filer som laddas i processen under Win64 som inte finns där för Win32-systemet.

Nu kan du vara frestad att titta på filstorlekarna, lägga till dem och använda det som grund för hur mycket extra minne som används, men du skulle sluta med felaktiga resultat. Dessa filer är av sin karaktär utformade för att delas komponenter och som ett resultat laddar den första filen som kräver en DLL den i minnet.

Efterföljande program som kräver samma DLL laddar inte hela komponenten i minnet. De får en pekare på den redan laddade komponenten, och allokerar RAM för de ytterligare elementen som laddas in i processen.

Vår testinställning

För att se vad som händer har jag satt upp två virtuella maskiner som kör Windows 7 Ultimate med 2 GB RAM tilldelat var och en. En av dem är 32-bitarsversionen och den andra är 64-bitars. Båda gick igenom exakt samma installations- och patchprocess.

Efter att båda systemen lappades, inaktiverade jag swapfilen på båda för att få en bättre bild av minnesanvändningen genom att säkerställa att RAM inte kunde slås ut på disken. När det var klart var LibreOffice 5.0.3.2 installerat.

En kopia av Sysinternals Process Explorer Process Explorer - Den kraftfullaste uppgiftshanteraren Ersättning [Windows] Process Explorer - Den mest kraftfulla arbetshanteringsutbytet [Windows] Låt oss vara ärliga, Windows Task Manager är inte så bra för att förstå och hantera processerna som körs på din dator. Även på Windows 8, där det är mycket förbättrat, kan uppgiftshanteraren inte komma nära ... Läs mer placerades också på båda maskinerna. Det här är verktyget som jag brukade samla information om minnesanvändning. Standardinställningen för kolumnen ändrades så att jag kunde titta på arbetssättet och WS Privat-användningen.

Dessa arbetsnummer anger hur mycket RAM som används av programmen. Det komplicerade lite ytterligare genom att reflektera mängden minne som används av delade bibliotek, även om de redan laddades av en annan process. På grund av detta, om du lägger till hela kolumnen är det möjligt att sluta med totalt större än installerat RAM. Arbetssatsen är fortfarande den bästa mätaren av exakt hur mycket minne som krävs för en process.

Processerna vi undersöker står inte heller ensamma. De olika LibreOffice-programmen startar en annan process, soffice.exe, som kommer att utföra ytterligare en process, soffice.bin. Vi måste titta på summan av alla tre processerna för att se effektiv minnesanvändning av varje program.

För det första testet öppnade jag helt enkelt Writer, Calc och Impress individuellt för att se hur mycket minne de förbrukar utan att data laddas och exporteras från Process Explorer. Med Calc och Impress hade jag öppnat en 3,7 MB .xls-fil och 3,9 MB .pptx-fil respektive och spelade in den nya minnesanvändningen. Resultaten kan ses i tabellen nedan. Alla data finns i KB.

Den stora överraskningen inträffade med Impress. Utan ett dokument använde det 4,1% mer RAM på 64-bitarsystemet och 9,9% mindre med dokumentet laddat. Jag grävde upp några andra presentationer och hade liknande resultat med dem alla. 64-bitarssystemet slutade med mindre RAM än 32-bitarssystemet.

Så, kräver 64-bitarsversionerna av Windows mer RAM än deras 32-bitars motsvarigheter när de kör 32-bitars apps? I allmänhet ja.

Men behöver du uppgradera din RAM? Antagligen inte. Skillnaden verkligen är inte så massiv. Det är verkligen inte 1,5 gånger annorlunda.

Utforska mer om: 64-bitars, datorminne, Windows.