64-bitarsprogram
När du kompilerar ett program kan du ange att det ska köras på ett Windows 64-bitars operativsystem antingen som ett internt program eller under WOW64 (Windows 32-bitars på Windows 64-bitars). WOW64 är en kompatibilitetsmiljö som gör att ett 32-bitarsprogram kan köras på ett 64-bitarssystem. WOW64 ingår i alla 64-bitarsversioner av Windows-operativsystemet.
Köra 32-bitars jämfört med 64-bitarsprogram i Windows
32-bitarsprogram som bygger på .NET Framework 4- eller senare versioner körs under WOW64 på 64-bitarssystem.
Visual Studio installerar 32-bitarsversionen av CLR på en x86-dator och både 32-bitarsversionen och lämplig 64-bitarsversion av CLR på en 64-bitars Windows-dator. (Eftersom Visual Studio är ett 32-bitarsprogram körs det under WOW64 när det installeras på ett 64-bitarssystem.)
Kommentar
På grund av utformningen av x86-emulering och undersystemet WOW64 för Itanium-processorfamiljen är programmen begränsade till körning på en processor. Dessa faktorer minskar prestanda och skalbarhet för 32-bitars .NET Framework-program som körs på Itanium-baserade system. Vi rekommenderar att du använder .NET Framework 4, som innehåller inbyggt 64-bitars stöd för Itanium-baserade system, för ökad prestanda och skalbarhet.
När du kör ett 64-bitars hanterat program på ett 64-bitars Windows-operativsystem kan du som standard skapa ett objekt på högst 2 GIGABYTE (GB). I .NET Framework 4.5 kan du dock öka den här gränsen. Mer information finns i elementet <gcAllowVeryLargeObjects>.
Många sammansättningar körs identiskt på både 32-bitars CLR och 64-bitars CLR. Vissa program kan dock bete sig annorlunda, beroende på CLR, om de innehåller ett eller flera av följande:
- Strukturer som innehåller medlemmar som ändrar storlek beroende på plattform (till exempel valfri pekartyp).
- Pekarearitmetik som innehåller konstanta storlekar.
- Felaktiga plattformsanrop eller COM-deklarationer som använder
Int32
för referenser i ställetIntPtr
för . - Kod som omvandlas
IntPtr
tillInt32
.
Mer information om hur du porterar ett 32-bitarsprogram som ska köras på 64-bitars CLR finns i Migrera 32-bitars hanterad kod till 64-bitars.
Allmän 64-bitars programmeringsinformation
Allmän information om 64-bitars programmering finns i följande dokument:
I Dokumentationen för Windows SDK läser du Programmeringsguide för 64-bitars Windows.
Information om Visual Studio-stöd för att skapa 64-bitarsprogram finns i Visual Studio IDE 64-bitars support.
Kompilatorstöd för att skapa 64-bitarsprogram
När du använder .NET Framework för att skapa ett program på antingen en 32-bitars eller en 64-bitars dator körs programmet som standard på en 64-bitars dator som ett internt program (dvs. inte under WOW64). I följande tabell visas dokument som förklarar hur du använder Visual Studio-kompilatorer för att skapa 64-bitarsprogram som ska köras som inbyggda, under WOW64 eller båda.
Kompilator | Kompilatoralternativ |
---|---|
Visual Basic | -platform (Visual Basic) |
Visual C# | -platform (C#-kompilatoralternativ) |
Visual C++ | Du kan skapa CIL-program (platform-agnostic, common intermediate language) med hjälp av /clr:safe. Mer information finns i -clr (Common Language Runtime Compilation). Visual C++ innehåller en separat kompilator för varje 64-bitars operativsystem. Mer information om hur du använder Visual C++ för att skapa inbyggda program som körs på ett 64-bitars Windows-operativsystem finns i 64-bitars programmering. |
Fastställa status för en .exe-fil eller .dll fil
Om du vill avgöra om en .exe fil eller .dll fil endast ska köras på en specifik plattform eller under WOW64 använder du CorFlags.exe (CorFlags Conversion Tool) utan alternativ. Du kan också använda CorFlags.exe för att ändra plattformsstatusen för en .exe fil eller .dll fil. CLR-huvudet för en Visual Studio-sammansättning har det större körningsversionsnumret inställt på 2 och det lägre körningsversionsnumret är inställt på 5. Program som har den lägre körningsversionen inställd på 0 behandlas som äldre program och körs alltid under WOW64.
Använd metoden för att programmatiskt fråga en .exe eller .dll för att se om den endast är avsedd att köras på en specifik plattform eller under WOW64 Module.GetPEKind .