Kjør en 32-bits applikasjon på et 64-bits system. Det er en rekke begrensninger for WOW64-delsystemet

Hvordan kjøre spillet på et 32-bit system hvis det krever et 64-bit system, instruksjoner.

Du vil sannsynligvis vite hvordan du konsekvent tjener penger på Internett fra 500 rubler om dagen?
Last ned boken min gratis
=>>

For å bruke mange moderne programmer, inkludert spill, kreves et 64-bits system. Derfor kan eiere av en PC med et 32-bitssystem, når de prøver å starte noen programmer, støte på en feil som "Versjonen av denne filen er inkompatibel med versjonen av Windows du bruker ...".

En feil som dette indikerer at spillet du prøver å installere på PC-en din er designet for et 64-bits system og ikke et 32-bits. Faktum er at, i motsetning til et 64-bitssystem, kan et 32-bitssystem kjøre programmer utviklet kun for det.

Derfor, hvis du er i tvil eller ikke kjenner bitheten til operativsystemet ditt, kan du finne ut som følger:

  • Gjennom "Start", skriv inn "Kontrollpanel".
  • Velg delen "System og sikkerhet" og klikk på "System".
  • På motsatt side av linjen med navnet "Systemtype" vil det være bitkapasiteten.

Hvordan kjøre et spill på et 32-bits system hvis det krever et 64-bits

Hvis det viser seg at operativsystemet er 32-bit, og du må installere en 64-bit, er det ikke nødvendig å installere Windows på nytt. Det er nøyaktig hvordan du løser et slikt problem som vil bli diskutert mer detaljert i denne artikkelen.

Forskjeller mellom 64-biters og 32-biters systemer

Først av alt er det verdt å forstå at den totale mengden RAM på datamaskinen avhenger av hvilket system som brukes. I tillegg avhenger hvor mye plass som kan tildeles for en spesifikk applikasjon av kapasiteten til systemet.

Således, når du bruker et 64-bits system, er den maksimale mengden RAM (Random Access Memory) 16 GB. Samtidig, i Windows Professional, kan dette tallet nå 192 GB. I sin tur tildeles opptil 4 GB RAM for et bestemt verktøy.

Hvis vi vurderer x32, er RAM i dette tilfellet mye mindre. Maksimal mengde RAM er 4 GB. Når det gjelder individuelle applikasjoner, kan det tildeles maksimalt 2 GB for dem.

Hastigheten på databehandling avhenger også av bitkapasiteten til prosessoren. Det vil si at i tilfellet med x64 fordeles belastningen jevnt over alle PC-kjerner. Og i x32 starter den andre kjernen først etter at den første er fullastet.

I tillegg er det et annet ganske viktig poeng - et 64-bits system er ikke egnet for svake PC-er. Derfor, når du kjøper en datamaskin, er det bedre å umiddelbart kjøpe x64, siden dette alternativet kan kjøre alle applikasjoner. Selv de som er designet for 32-bits systemer.

Men hvis du ikke vil gjøre dette eller det rett og slett ikke er noen slik mulighet, kan du bruke et tredjepartsprogram eller eksterne servere.

Programmer for å lage et gjeste-OS

Det finnes verktøy som lar deg etterligne driften av systemer som inneholder bestemt programvare og maskinvare. Men i dette tilfellet anbefales det kun å bruke lisensierte versjoner av visualiseringsprogrammer.

Driften av slike verktøy er basert på opprettelsen av en såkalt gjesteversjon av operativsystemet. For å lage den trenger du dessuten en disk eller et bilde med det nødvendige operativsystemet.

Blant programmene som lar deg lage et gjesteoperativsystem er:

  • Oracle VirtualBox.
  • VMware Worstation.
  • Windows Virtual PC, etc.

Eksterne servere

Dette alternativet med å bruke eksterne servere til å kjøre spill som krever et 64-bits OS er også ganske praktisk, det samme er spesialverktøy. Bare når du bruker en ekstern server, vil alle beregninger og informasjon bli behandlet utelukkende på den.

Essensen av dette alternativet er at du ikke vil bli hemmet av begrensningene du kan møte på x32 OS. Siden spill og andre programmer vil kjøre på systemene de trenger.

For eksempel lar et program som Microsoft Azure deg lage flere operativsystemer samtidig. For de som elsker spill, kan du bruke NVIDIA GRID. Med dens hjelp blir skjermkortet virtualisert.

Bare husk at disse tjenestene fungerer med eksterne servere. Følgelig kreves en god Internett-tilkobling for at de skal fungere normalt.

Sammendrag

Når du står overfor spørsmålet om hvordan du kjører et spill på et 32-bitssystem hvis det krever et 64-bit, er det fullt mulig å løse det. Bare for dette, som du kan se, må du jobbe med spesialiserte programmer eller eksterne servere. Og dette er ganske vanskelig.

Ikke glem risikoen for å infisere PC-en din med skadelig programvare. Derfor, hvis datamaskinen din tillater det, er det bedre å installere et 64-biters OS. I dette tilfellet vil du ikke ha problemer med å starte programmer og spill.

Men husk at valget alltid er ditt. Men ikke alle PC-er kan kjøre et 64-biters operativsystem.

Nyttige artikler:

P.S. Jeg legger ved et skjermbilde av inntektene mine i tilknyttede programmer. Og jeg minner deg om at alle kan tjene penger på denne måten, selv en nybegynner! Det viktigste er å gjøre det riktig, noe som betyr å lære av de som allerede tjener penger, det vil si fra Internett-bedrifter.


Få en liste over velprøvde, spesielt aktuelle, tilknyttede programmer i 2018 som betaler penger!


Last ned sjekklisten og verdifulle bonuser gratis
=>> "De beste tilknyttede programmene i 2018"

De fleste moderne spill som Overwatch, Hurtworld eller Subnautica kan bare kjøres på 64-bits operativsystemer. Det er rett og slett ikke lønnsomt for skaperne av disse programmene å lage forskjellige versjoner av applikasjoner for 32- og 64-bit. Selv om begge versjonene er ganske vanlige. Selvfølgelig er det ganske enkelt å bytte til x64. Men hva om du ikke skal endre operativsystemet og fortsatt vil se et populært spill? Lær hvordan du kjører Subnautica og andre 64-biters programmer på et 32-bitssystem.

For å gjøre dette, må datamaskinen oppfylle kravene som er nødvendige for normal drift av applikasjonen. Prosessoren må i utgangspunktet ha x64-arkitektur.

Hva er forskjellen mellom et 32-bitssystem og et 64-bitssystem?

Hvorfor kan ikke programmer designet for 64 bit åpne på 32 bit? Hvorfor er disse versjonene så forskjellige, siden de ikke kjører de samme applikasjonene? Og hvis Overwatch kan spilles på x64, hvorfor kan det ikke spilles på samme datamaskin, men med x32?

Det avhenger av systemet hvor mye RAM som kan installeres på en PC og hvor mye den kan allokere til hver spesifikk applikasjon. I x64 er den maksimale mengden RAM 16 GB (i Windows 7 Professional - opptil 192 GB). I dette tilfellet leveres ethvert verktøy med opptil 4 GB. I x32-versjonen er de angitte tallene mye mindre - maksimalt 4 GB og 2 GB for et eget program.

Kapasiteten til prosessoren bestemmer hvordan den behandler informasjon. Dette påvirker ytelsen betydelig - det er mye bedre i 64 bit. Det er et større register for lagring av data, og belastningen fordeles over alle kjerner samtidig. Og i et 32-biters operativsystem aktiveres den andre kjernen når den første er fullt opptatt.

Installer x32 på "svake" maskiner. Hvis PC-en din ikke har mye RAM og ikke har den beste prosessoren, er det rett og slett ingen vits i å kjøre 64 bit. Dette vil bare "overbelaste" den elektroniske datamaskinen uten å øke produktiviteten til den. Men en kraftig x64-datamaskin vil være helt riktig.

Selv om disse systemene overfladisk ligner hverandre, er de svært forskjellige på programvarenivå. De har et annet sett med drivere, så Subnautica, Overwatch, Hurtworld og andre slike vil ikke kjøre på et 32-bits OS, selv om PC-en har de nødvendige egenskapene.

For moderne spill, applikasjoner, grafikk eller videoredigeringsprogrammer er ikke de 2 GB som x32 tildeler dem nok. Komponister av nye spill lager produktene sine spesielt for x64.

Hvordan finne ut om en prosessor støtter x64?

Du kan se hvilket OS du har installert slik:

  1. Høyreklikk på "Min datamaskin"-ikonet på skrivebordet.
  2. Element "Egenskaper". Den kan også finnes i delen Kontrollpanel.
  3. "Type"-linjen vil indikere hvor mange biter det er i din OS-versjon.

Først må du forstå hvilket system du jobber med.

Før du kjører Overwatch på et 32-bitssystem, finn ut om PC-en din kan håndtere spillet. Sjekk om prosessoren støtter 64-biters instruksjoner. Dette kan gjøres ved hjelp av spesielle testerprogrammer. For eksempel er gratisverktøyet "SecurAble" egnet. Den trenger ikke å installeres. Og følgelig er det ikke nødvendig å fjerne det etter bruk. Bare kjør den kjørbare filen. Informasjon om prosessoren vil vises: navn, klokkehastighet, bitdybde, om den støtter D.E.P (dette er beskyttelsen av enheten mot bufferoverløp) og maskinvarevisualisering. Du kan klikke på hvilket som helst av resultatene og beskrivelsen vises.

Sjekker prosessorstøtte for 64-bits kommandoer

Hvis programmet returnerer en dom på "Maksimalt 32 bit", betyr det at applikasjoner designet for x64 sannsynligvis ikke vil fungere. For å spille Overwatch eller Hurtword, må du bytte prosessor eller avhende eksterne servere.

Hvordan gjøre et 32-bitssystem om til et 64-bit?

Det finnes flere verktøy for såkalt virtualisering. De emulerer driften av en plattform med viss programvare og maskinvare. Hvis du trenger å finne ut hvordan du kjører Hurtworld på et 32-bitssystem, bruk et av disse verktøyene.

Disse programmene skaper en slags "gjeste" OS. Men du må uansett installere den og kjøpe en lisensiert versjon hvis den er betalt. For å gjøre dette må du ha en disk (eller diskbilde) med operativsystemet du trenger.

Oracle VirtualBox

Et universelt program for lignende oppgaver.

  1. Installer den og kjør den. Til venstre vil det være en liste over installerte operativsystemer og en verktøylinje. Til høyre er informasjon om det valgte systemet.
  2. Klikk på "Opprett"-knappen. Et informasjonsvindu vises. Klikk "Neste".
  3. Velg OS-type og versjon. Det er mange alternativer å velge mellom: ikke bare Microsoft Windows, men også Linux.
  4. Deretter må du bestemme hvor mye RAM du skal allokere til "gjeste"-systemet.
  5. Etter dette må du lage en virtuell disk (som OS-filene vil bli skrevet til). Du kan velge en eksisterende eller lage en ny. Og merk av i boksen ved siden av alternativet "Boot disk".
  6. I neste vindu velger du om diskkapasiteten skal være fast eller dynamisk (endrende). Det er detaljerte forklaringer for hvert element. Det er bedre å gjøre støvelen en fast. Du kan legge til flere stasjoner senere.
  7. Konfigurer den virtuelle lagringsstørrelsen. Vanligvis er 10 GB nok. Det er bedre å lage det på et eget sted - ikke på samme sted der hovedsystemet er installert.
  8. Vent til prosessen er fullført. En ny vil vises i listen over tilgjengelige.

En måte er å bruke virtualiseringsverktøy

Etterpå kan du konfigurere maskinvaren:

  1. Velg gjeste-OS og klikk på Egenskaper.
  2. I delen Generelt - Avansert endrer du mappen for lagring av bilder til den som passer for deg.
  3. Sett opp utklippstavlen der. Den bestemmer hvordan informasjon skal overføres mellom ulike operativsystemer.
  4. I kategorien "System" kan du velge egenskapene til det virtuelle hovedkortet og prosessoren.
  5. Elementet "Nettverk" er nødvendig for å konfigurere tilgang til World Wide Web. Du kan forlate standardinnstillingene.
  6. I "Media"-delen angir du hvor du vil hente OS fra. Hvis installasjonsprogrammet er på en CD, sett det inn i stasjonen. For å laste ned fra .ISO, klikk på "Åpne"-knappen ved siden av "Drive"-listen. Det ser ut som en gul mappe.
  7. Du kan også legge til andre bilder der for raskt å bytte mellom dem: databaser, applikasjoner, spill.

Etter å ha fullført innstillingene, klikk "OK". For å starte gjeste-OS, klikk på det og "Start"-knappen. Installasjonen vil fortsette. Og du kan bytte mellom systemer: spill i 64-bit og arbeid i 32-bit.

Andre virtuelle maskiner

Det finnes også verktøy for å jobbe med virtuelle maskiner:

  • VMware arbeidsstasjon. Et seriøst profesjonelt program for komplekse oppgaver. Det deles ut på betalt basis.
  • Et enkelt verktøy for maskinvareemulering. Det er åpen kildekode.
  • Windows Virtual PC. Fungerer kun med Windows-systemer. Du kan konfigurere prioriteten til prosesser - på denne måten vil ressurser automatisk tildeles den elektroniske maskinen hvis den utfører en bestemt oppgave.
  • Virt-Manager. Gir store muligheter for å tilpasse maskinvarekomponenten - virtuell maskinvare er tilgjengelig for enhver smak.

Cloud computing (eksterne servere)

Hvis ytelsen fortsatt ikke er nok til å kjøre spillet, kan du gjøre det på en ekstern server. Alle beregninger, all informasjon vil bli behandlet på den. På denne måten vil du ikke bli hindret av noen begrensninger knyttet til x32. Tross alt, i hovedsak vil applikasjoner "åpnes" på passende systemer. Bare ikke på datamaskinen din.

Microsoft Azure-programmet er egnet for dette. Med dens hjelp kan du lage flere operativsystemer for forskjellige formål. Spillelskere vil også finne den spesialiserte NVIDIA GRID-vnyttig. Disse verktøyene krever høyhastighets Internett.

Banebrytende skytjenester utvider våre muligheter

Å jobbe med 64-bits applikasjoner på et 32-bitssystem er fullt mulig. Men du må installere tilleggsprogramvare eller, generelt, bytte til en ekstern server. Dette er ganske vanskelig å gjøre. Hvis du vil spille Overwatch, Hurtword og andre populære spill fullt ut, er det bedre å installere x64 OS. På denne måten vil det ikke være noen kompatibilitetsproblemer. Og du trenger ikke å konfigurere noe.

NastroyVse.ru

windows x64 - Hvorfor er det fortsatt så mange 32-biters programmer?

Datamaskinen din kjører mest sannsynlig en 64-biters versjon av Windows. Men hvis du åpner Task Manager, vil du se at de fleste programmene på systemet ditt fortsatt er 32-bit. Er dette virkelig et problem? Det er mange forskjeller mellom 64-biters og 32-biters versjoner av Windows. 64-biters versjoner av Windows kan kjøre 32-biters programvare, men 32-biters versjoner av Windows kan ikke kjøre 64-biters programvare.

Hvordan finne ut bitdybden til et program?

La oss bruke Task Manager for å se hvilke av programmene dine som er 64-bit og hvilke som er 32-bit. Høyreklikk på oppgavelinjen og velg Oppgavebehandling eller trykk Ctrl + Shift + Esc for å åpne den. Se på kolonnen med prosessnavn. Hvis du bruker 64-bitsversjonen av Windows 8.1 eller 8, vil du se ordet "(32-bit)" etter hver 32-biters versjon av programnavnet. Hvis du bruker 64-biters versjonen av Windows 7, vil du se "*32" i stedet. 32-biters programmer er vanligvis installert i mappen C:\Program Files (x86)\ på 64-biters versjoner av Windows, mens 64-biters programmer vanligvis installeres i mappen C:\Program Files\. Det er bare en regel. Men ingen sier at det ikke er noen annen regel som forbyr installasjon av 64-biters programmer i mappen C:\Program Files (x86)\. For eksempel er Steam et 32-bitsprogram, så det installeres i "C:\Program Files (x86)\" som standard. Spillene du installerer på Steam er som standard installert i mappen C:\Program Files (x86)\Steam, inkl. til og med 64-biters versjoner av spill. Hvis du sammenligner to forskjellige Program Files-mapper, vil du finne at de fleste av programmene dine sannsynligvis er installert i mappen C:\Program Files (x86). Og disse programmene er stort sett 32-biters.

Kjører 32-biters programvare på et 64-biters operativsystem

Ved første øyekast virker det forferdelig at de fleste av Windows-programmene dine ikke bruker 64-biters operativsystemarkitektur. Du tror kanskje at det er en ytelsesstraff for å kjøre 32-biters programmer på et 64-biters operativsystem, men dette er ikke tilfelle. Windows kjører 32-biters programmer gjennom WoW64-kompatibilitetsnivået på 64-biters versjoner av Windows. Imidlertid er 64-biters Intel- og AMD-prosessorer bakoverkompatible og kan kjøre 32-biters programvare direkte. Alle 32-biters Windows-programmene vil kjøre akkurat som på en 32-biters versjon av Windows. Dermed er det ingen hindring for å kjøre disse programmene på et 64-bits operativsystem. Selv om hvert program du bruker fortsatt er 32-bit, vil du dra nytte av det fordi operativsystemet i seg selv vil kjøre i 64-bits modus. Og 64-biters versjonen av Windows er sikrere.

64-bits programmer og 32-biters programmer: hva er bedre?

32-biters programmer kjører uten problemer på 64-biters versjoner av Windows-operativsystemer. Men ville det vært bedre om alle programmene dine var 64-biters? Det er definitivt fordeler med 64-bits programmer. 32-bits programmer kan bare bruke 2 GB minne, mens 64-bits programmer kan bruke mye mer. Hvis et program sannsynligvis vil bli angrepet, kan ytterligere sikkerhetsfunksjoner brukt på 64-biters programmer hjelpe. Google Chrome er for tiden en 32-bits applikasjon selv på 64-biters versjoner av Windows OS, men en 64-bits betaversjon av dette programmet har allerede dukket opp. Og Google lover at 64-biters versjonen av Chrome skal være raskere, sikrere og mer stabil. Noen programmer tilbyr 64-bitsversjoner. For eksempel: Photoshop, iTunes, Microsoft Office og noen av de mest populære Windows-programmene, og de er alle tilgjengelige i 64-biters form. Siste spill er også ofte 64-bit slik at de kan bruke mer enn 2 GB minne. Mange programmer har ikke gått over til 64-bit, og de fleste vil aldri gjøre det. Du kan fortsatt kjøre de fleste 32-biters Windows-programmer i dag, selv de som ble utgitt for ti år siden, på en 64-biters versjon av Windows, selv om utviklerne deres allerede har oppdatert dem. En utvikler som ønsker å tilby en 64-bits versjon av programmet må gjøre mye ekstra arbeid. Han må sørge for at den eksisterende koden kompileres og kjører riktig som 64-bits programvare. Den må tilby og støtte to separate versjoner av programmet, siden brukere som kjører en 32-biters versjon av Windows ikke kan bruke 64-biters versjonen. La oss ta Evernote for Windows-skrivebordet som et eksempel. Selv om de ga ut en 64-biters versjon av Evernote, vil brukerne sannsynligvis ikke merke forskjellen i det hele tatt. Et 32-bits program kan kjøre helt fint på en 64-biters versjon av Windows, og hvis det ikke er noen merkbare fordeler, er det ingen vits i å ha en 64-bits versjon.

Hvor finner du 64-bits applikasjoner

Du vil vanligvis ikke kunne velge mellom 32-biters og 64-biters versjoner av programvaren. Når du for eksempel installerer iTunes for Windows, leder Apples nettsted deg automatisk til enten 32-biters eller 64-biters versjonen av installasjonsprogrammet, avhengig av hvilken versjon av Windows du har. Når du installerer Photoshop for Windows, installeres vanligvis både 32-biters og 64-biters kjørbare filer. Photoshop velger automatisk fra dem. Noen ganger kan du se separate nedlastingslenker for 32-biters og 64-biters versjoner av programmer, men dette er ikke så vanlig. Det viktige er ikke å søke etter 64-bits applikasjoner, men å finne applikasjoner som fungerer bra for deg. For de fleste applikasjoner spiller det ingen rolle om versjonen er 64-bit eller 32-bit.

Det er lett å lure på hvorfor så mange applikasjoner fortsatt er 32-bit når du åpner oppgavebehandlingen. Men dette er ikke et veldig stort problem, og her er hvorfor. Fordi de fleste applikasjoner ikke får noe når de bytter til 64-biters utgaver av programmer. Selv om utviklerne gjorde alt arbeidet og ga ut 64-bitsversjoner av alle de små skrivebordsapplikasjonene og verktøyene du bruker på Windows, ville du ikke kunne se forskjellen for de fleste av dem.

itchief.ru

7 trinn for å overføre et program til et 64-bits system

Artikkelen diskuterer hovedtrinnene for å sikre riktig overføring av 32-bits Windows-applikasjoner til 64-biters Windows-systemer. Selv om artikkelen er rettet mot utviklere som bruker C/C++-språket i Visual Studio 2005/2008, vil den også være nyttig for andre utviklere som planlegger å portere applikasjonene sine til 64-bits systemer. Artikkelen beskriver hovedpunktene for utviklere som planlegger å migrere 32-biters programmer til 64-biters systemer. Listen over problemstillinger som vurderes er selvfølgelig ikke fullstendig, men jeg vil gjerne håpe at det over tid vil bli tilbudt en utvidet versjon av denne artikkelen. Forfatteren vil være takknemlig for tilbakemeldinger, kommentarer og spørsmål som vil forbedre informasjonsinnholdet i denne artikkelen. I dataarkitektur refererer begrepet "64-bit" til 64-bits heltall og andre datatyper som er 64-biters store. "64-bits" systemer kan bety 64-bits mikroprosessorarkitekturer (for eksempel EM64T, IA-64) eller 64-biters operativsystemer (for eksempel Windows XP Professional x64 Edition). AMD64 (aka x86-64, Intel 64, EM64T, x64) er en 64-bits mikroprosessorarkitektur og tilsvarende instruksjonssett utviklet av AMD. Dette instruksjonssettet ble lisensiert av Intel under navnet EM64T (Intel64). AMD64-arkitekturen er en utvidelse av x86-arkitekturen med full bakoverkompatibilitet. Arkitekturen har blitt utbredt som base for personlige datamaskiner og arbeidsstasjoner. IA-64 er en 64-bits mikroprosessorarkitektur utviklet i fellesskap av Intel og Hewlett Packard. Implementert i Itanium og Itanium 2 mikroprosessorer. Arkitekturen brukes hovedsakelig i multiprosessorservere og klyngesystemer. AMD64 og IA-64 er to forskjellige 64-bits arkitekturer som ikke er kompatible med hverandre. Derfor bør utviklere umiddelbart bestemme om de trenger å støtte begge disse arkitekturene eller bare én. I de fleste tilfeller, med mindre du utvikler høyt spesialisert programvare for klyngesystemer eller implementerer ditt eget høyytelses DBMS, trenger du mest sannsynlig bare å implementere støtte for AMD64-arkitekturen, som er mye mer utbredt enn IA-64. Dette gjelder spesielt programvare for PC-markedet, som er nesten 100 prosent okkupert av AMD64-arkitekturen. Videre i artikkelen vil vi bare snakke om AMD64-arkitekturen (EM64T, x64), siden bruken av den nå er mest relevant for.

Når vi snakker om ulike arkitekturer, bør vi nevne konseptet "Data Model". En datamodell skal forstås som et forhold mellom dimensjonene til typer akseptert innenfor utviklingsmiljøet. For ett operativsystem kan det være flere utviklingsverktøy som følger ulike datamodeller. Men vanligvis er det bare én modell som råder, den som passer best til maskinvare- og programvaremiljøet. Et eksempel er 64-biters Windows-operativsystemet, der den opprinnelige datamodellen er LLP64. Men for kompatibilitet støtter 64-biters Windows-systemet kjøring av 32-biters programmer som kjører i ILP32LL-datamodellmodus. Tabell N1 gir informasjon om hoveddatamodellene.


Tabell N1. Datamodeller

Datamodellen som brukes påvirker utviklingsprosessen til 64-bits applikasjoner, siden programkoden må ta hensyn til bitdybden til dataene som brukes.

Du bør begynne å mestre 64-bits systemer med spørsmålet "Trenger vi å bygge om prosjektet vårt for et 64-bitssystem?" Dette spørsmålet må besvares, men ikke hastverk, etter å ha tenkt. På den ene siden kan du falle bak konkurrentene dine ved å ikke tilby 64-bits løsninger i tide. På den annen side kan du kaste bort tiden din på en 64-bits applikasjon som ikke vil gi noen konkurransefortrinn. Vi lister opp hovedfaktorene som vil hjelpe deg å ta et valg. Du bør ikke lage en 64-biters versjon av en applikasjon med kort livssyklus. Takket være WOW64-undersystemet fungerer gamle 32-bits applikasjoner ganske bra på 64-bits Windows-systemer, og derfor gir det ingen mening å lage et 64-bitsprogram som ikke lenger vil bli støttet om 2 år. I tillegg har praksis vist at overgangen til 64-biters versjoner av Windows har blitt forsinket, og kanskje vil flertallet av brukerne på kort sikt kun bruke 32-biters versjonen av programvareløsningen din. Hvis du planlegger langsiktig utvikling og langsiktig støtte for et programvareprodukt, bør du begynne å jobbe med 64-bitsversjonen av løsningen din. Dette kan gjøres sakte, men husk at jo lenger du ikke har en fullverdig 64-bits versjon, desto flere vanskeligheter kan det oppstå med å støtte en slik applikasjon installert på 64-biters versjoner av Windows. Å kompilere programmet på nytt for et 64-bits system vil tillate det å bruke enorme mengder RAM, og vil også øke hastigheten på driften med 5-15%. En hastighetsøkning på 5-10 % vil skje på grunn av bruken av arkitektoniske evner til en 64-bits prosessor, for eksempel et større antall registre. En annen 1%-5% økning i hastighet skyldes fraværet av WOW64-laget, som oversetter API-anrop mellom 32-bits applikasjoner og 64-biters operativsystem. Hvis programmet ditt ikke fungerer med store datamengder (mer enn 2 GB) og hastigheten ikke er kritisk, er det ikke så relevant å bytte til et 64-bitssystem i nær fremtid. Forresten, selv enkle 32-bits applikasjoner kan dra nytte av å kjøre dem i et 64-bits miljø. Du vet sannsynligvis at et program kompilert med /LARGEADDRESSAWARE:YES-tasten kan tildele opptil 3 gigabyte med minne hvis 32-biters Windows-operativsystemet startes med /3gb-tasten. Det samme 32-bits programmet som kjører på et 64-bitssystem kan tildele nesten 4 GB minne (i praksis ca. 3,5 GB). Hvis du utvikler biblioteker, komponenter eller andre elementer som tredjepartsutviklere bruker for å lage sin programvare, må du være proaktiv i å lage en 64-biters versjon av produktet ditt. Ellers vil dine kunder som er interessert i å gi ut 64-bit versjoner bli tvunget til å se etter alternative løsninger. For eksempel svarte noen utviklere av programvare- og maskinvarebeskyttelse med en lang forsinkelse på fremveksten av 64-biters programmer, noe som tvang en rekke klienter til å se etter andre verktøy for å beskytte programmene deres. En ekstra fordel med å gi ut en 64-bit versjon av biblioteket er at du kan selge det som et eget produkt. Dermed vil dine kunder som ønsker å lage både 32-bit og 64-bit applikasjoner bli tvunget til å kjøpe 2 forskjellige lisenser. Denne policyen brukes for eksempel av Spatial Corporation ved salg av Spatial ACIS-biblioteket. Før du planlegger å lage 64-bitsversjoner av produktet ditt, finn ut om det finnes 64-bitsversjoner av bibliotekene og komponentene det bruker. Finn også ut hva prispolitikken er for 64-bitsversjonen av biblioteket. Alt dette kan du finne ut ved å besøke nettsiden til bibliotekutvikleren. Hvis støtte ikke er tilgjengelig, så se på forhånd etter alternative løsninger som støtter 64-bits systemer. Hvis løsningene dine fortsatt inneholder 16-bits moduler, er det på tide å bli kvitt dem. Å kjøre 16-bits applikasjoner på 64-biters versjoner av Windows støttes ikke. Her bør vi avklare ett punkt knyttet til bruken av 16-bits installatører. De brukes fortsatt til å installere noen 32-bits applikasjoner. Det er laget en spesiell mekanisme som i farten erstatter en rekke av de mest populære 16-bits installatørene med nyere versjoner. Dette kan forårsake misforståelsen om at 16-biters programmer fortsatt kjører i et 64-biters miljø. Husk at dette ikke er sant. Ikke glem at bruk av en stor mengde monteringskode kan øke kostnadene ved å lage en 64-biters versjon av applikasjonen betydelig. Etter å ha veid alle de oppførte faktaene, alle fordeler og ulemper, avgjør om du skal overføre prosjektet til 64-bits systemer. Og hvis det er tilfelle, så la oss gå videre. Bare fordi du har bestemt deg for å utvikle en 64-biters versjon av produktet ditt og er villig til å bruke tid på det, er det ingen garanti for suksess. Faktum er at du må ha alle nødvendige verktøy og det kan være ubehagelige hendelser her.

Det enkleste, men også det mest uoverkommelige, problemet kan være mangelen på en 64-bits kompilator. Artikkelen er skrevet i 2009, men det er fortsatt ingen 64-bit C++ Builder-kompilator fra Codegear. Utgivelsen forventes først mot slutten av dette året. Det er umulig å komme utenom et lignende problem, med mindre du selvfølgelig skriver om hele prosjektet, for eksempel ved å bruke Visual Studio. Men hvis alt er klart med mangelen på en 64-bits kompilator, kan andre lignende problemer vise seg å være mer skjulte og dukke opp allerede på stadiet av arbeidet med å overføre prosjektet til en ny arkitektur. Derfor vil jeg råde deg til å foreta undersøkelser på forhånd for å finne ut om alle de nødvendige komponentene finnes som kreves for å implementere 64-biters versjonen av produktet ditt. Ubehagelige overraskelser kan vente deg.

Selvfølgelig er det umulig å liste opp alt som kan være nødvendig for et prosjekt her, men jeg vil likevel tilby en liste som vil hjelpe deg å finne ut og kanskje huske andre punkter som er nødvendige for gjennomføringen av ditt 64-bits prosjekt: Det er vanskelig å si noe annet om viktigheten av å ha 64-bits kompilator. Det må bare være. Hvis du planlegger å utvikle 64-bits applikasjoner med den nyeste versjonen (i skrivende stund) av Visual Studio 2008, vil følgende tabell N2 hjelpe deg med å finne ut hvilken utgave av Visual Studio du trenger.

Tabell N2. Mulighetene til ulike utgaver av Visual Studio 2008 Du kan selvfølgelig bruke virtuelle maskiner til å kjøre 64-bits applikasjoner på 32-bits maskinvare, men dette er ekstremt upraktisk og vil ikke gi det nødvendige testnivået. Det anbefales at maskinene har minst 4-8 gigabyte RAM installert. Hvis biblioteker er gitt i kildekoden, må en 64-biters prosjektkonfigurasjon være til stede. Å oppgradere et bibliotek selv for å bygge det for et 64-bitssystem kan være en utakknemlig og vanskelig oppgave, og resultatet kan være upålitelig og utsatt for feil. Du kan også bryte lisensavtaler ved å gjøre det. Hvis du bruker biblioteker som binære moduler, bør du også finne ut om det finnes 64-bits moduler. Du vil ikke kunne bruke 32-biters DLL-er i en 64-bits applikasjon. Du kan lage en spesiell sele via COM, men dette vil være en egen stor, kompleks oppgave. Vær også oppmerksom på at kjøp av 64-bitsversjonen av biblioteket kan koste ekstra penger. Visual C++ støtter ikke 64-bits inline assembler. Du må enten bruke en ekstern 64-bits assembler (for eksempel MASM) eller ha en C/C++-implementering av samme funksjonalitet. Betydelig revisjon av testmetodikk, modernisering av enhetstester, bruk av nye verktøy. Dette vil bli diskutert mer detaljert nedenfor, men ikke glem å ta hensyn til dette når du estimerer tiden brukt på å migrere en applikasjon til et nytt system. Hvis du utvikler ressurskrevende applikasjoner som bruker en stor mengde RAM, må du ta vare på å fylle på databasen med testinndata. Når du laster 64-bits applikasjoner, er det tilrådelig å gå utover 4 gigabyte minneforbruk. Mange feil kan bare vises under slike forhold. Beskyttelsessystemet som brukes må støtte 64-bits systemer i den grad du trenger. For eksempel ga Aladdin raskt ut 64-biters drivere for å støtte Hasp maskinvarenøkler. Men i svært lang tid fantes det ikke noe system for automatisk beskyttelse av 64-bits binære filer (Hasp Envelop-programmet). Dermed måtte beskyttelsesmekanismen implementeres uavhengig innenfor programkoden, som var en ekstra kompleks oppgave som krevde kvalifikasjoner og tid. Ikke glem lignende problemer knyttet til sikkerhet, oppdateringssystemet og så videre. Du trenger et nytt installasjonsprogram som kan installere 64-bits applikasjoner fullt ut. Jeg vil umiddelbart advare deg om en tradisjonell feil. Dette er opprettelsen av 64-biters installasjonsprogram for å installere 32/64-bits programvareprodukter. Når man forbereder en 64-biters versjon av en applikasjon, ønsker utviklere ofte å gjøre den helt 64-biters. Og de lager et 64-bits installasjonsprogram, og glemmer at brukere av et 32-bits operativsystem rett og slett ikke vil kjøre en slik installasjonspakke. Vær oppmerksom på at det ikke er 32-bitsapplikasjonen som er inkludert i distribusjonen sammen med 64-biter som ikke starter, men selve installasjonsprogrammet. Tross alt, hvis distribusjonen er en 64-bits applikasjon, vil den selvfølgelig ikke kjøre på et 32-biters operativsystem. Det mest irriterende med dette er at brukeren ikke vil kunne gjette hva som skjer. Han vil ganske enkelt se en installasjonspakke som ikke kan startes. Å lage en 64-bits prosjektkonfigurasjon i Visual Studio 2005/2008 ser ganske enkelt ut. Vanskeligheter vil vente på deg på stadiet med å sette sammen en ny konfigurasjon og søke etter feil i den. For å lage en 64-bits konfigurasjon, fullfør bare følgende 4 trinn: Start konfigurasjonsbehandlingen, som vist i figur N1:

Figur 1. Starte konfigurasjonsbehandlingen I konfigurasjonsbehandlingen velger du støtte for den nye plattformen (Figur N2): Figur 2. Opprette en ny konfigurasjon Velg 64-bits plattformen (x64), og velg innstillingene fra 32-biters versjonen som grunnlag (Figur N3). Visual Studio-miljøet vil justere innstillingene som påvirker selve byggemodusen.

Figur 3. Velg x64 som plattform og bruk Win32-konfigurasjonen som grunnlag.. Legge til en ny konfigurasjon er fullført, og vi kan velge 64-bits konfigurasjonsalternativet og begynne å kompilere 64-bits applikasjonen. Valget av 64-bits konfigurasjon for montering er vist i figur N4. Figur 4. 32-biters og 64-biters konfigurasjoner er nå tilgjengelige Hvis du er heldig, vil det ikke være nødvendig å konfigurere et 64-bits prosjekt i tillegg. Men dette avhenger i stor grad av prosjektet, dets kompleksitet og antall biblioteker som brukes. Det eneste som må endres med en gang er stabelstørrelsen. Hvis prosjektet ditt bruker en standard stabelstørrelse, det vil si 1 megabyte, er det fornuftig å sette det til 2 megabyte for 64-bitsversjonen. Dette er ikke nødvendig, men det er bedre å være på den sikre siden på forhånd. Hvis du bruker en stabelstørrelse som er forskjellig fra standardstørrelsen, er det fornuftig å gjøre den 2 ganger større for 64-biters versjonen. For å gjøre dette, i prosjektinnstillingene, finn og endre parametrene Stack Reserve Size og Stack Commit Size. Her vil det være greit å snakke om typiske problemer som oppstår under kompileringsfasen av en 64-bits konfigurasjon. Vurder hvilke problemer som oppstår med tredjepartsbiblioteker, fortell at kompilatoren i koden knyttet til WInAPI-funksjoner ikke lenger vil tillate å plassere en peker i LONG-typen, og du må modernisere koden din og bruke LONG_PTG-typen. Og mange mange andre. Dessverre er det så mye av dette og feilene er så varierte at det ikke er mulig å presentere det i én artikkel eller kanskje en bok. Du må se gjennom alle feilene som kompilatoren vil produsere og nye advarsler som ikke var der før og i hvert enkelt tilfelle finne ut hvordan du moderniserer koden.

En samling lenker til ressurser dedikert til utvikling av 64-bits applikasjoner kan gjøre livet delvis enklere: http://www.viva64.com/links/64-bit-development/. Samlingen oppdateres kontinuerlig og forfatteren vil være takknemlig overfor leserne hvis de sender ham lenker til ressurser som etter deres mening fortjener oppmerksomhet.

Vi vil her kun fokusere på typene som kan være av interesse for utviklere ved migrering av applikasjoner. Disse typene er presentert i tabell N3. De fleste kompileringsfeil vil være knyttet til bruken av disse typene.

Type Dimensjonstype på plattform x32 / x64 Merk
int 32 / 32 Grunnleggende type. På 64-bits systemer forblir det 32-bit.
lang 32 / 32 Grunnleggende type. På 64-biters Windows-systemer forblir den 32-biters. Vær oppmerksom på at på 64-bit Linux-systemer er denne typen utvidet til 64-bit. Ikke glem dette hvis du utvikler kode som skal fungere og kompilere for Windows- og Linux-systemer.
størrelse_t 32 / 64 Grunnleggende usignert type. Størrelsen på typen er valgt slik at den kan romme den maksimale størrelsen på en teoretisk mulig matrise. En peker kan trygt plasseres i typen size_t (unntaket er pekere til klassefunksjoner, men dette er et spesielt tilfelle).
ptrdiff_t 32 / 64 Ligner på size_t-typen, men signert. Resultatet av et uttrykk hvor en peker trekkes fra en annen (ptr1-ptr2) vil være av typen ptrdiff_t.
Peker 32 / 64 Størrelsen på pekeren avhenger direkte av bitkapasiteten til plattformen. Vær forsiktig når du kaster pekere til andre typer.
__int64 64 / 64 Signert 64-bits type.
DWORD 32 / 32 32-bits usignert type. Erklært i WinDef.h som: typedef unsigned long DWORD;
DWORDLONG 64 / 64 64-bits usignert type. Erklært i WinNT.h som: typedef ULONGLONG DWORDLONG;
DWORD_PTR 32 / 64 En usignert type som kan holde en peker. Erklært i BaseTsd.h som: typedef ULONG_PTR DWORD_PTR;
DWORD32 32 / 32 32-bits usignert type. Erklært i BaseTsd.h som: typedef unsigned int DWORD32;
DWORD64 64 / 64 64-bits usignert type. Erklært i BaseTsd.h som: typedef unsigned __int64 DWORD64;
HALF_PTR 16 / 32 En halv pekepinn. Erklært i Basetd.h som:#ifdef _WIN64 typedef int HALF_PTR;#else typedef short HALF_PTR;#endif
INT_PTR 32 / 64 En signert type som en peker kan plasseres i. Erklært i BaseTsd.h som:#if definert(_WIN64) typedef __int64 INT_PTR; #else typedef int INT_PTR;#endif
LANG 32 / 32 En signert type som forblir 32-bit. Derfor bør LONG_PTR nå brukes i mange tilfeller. Erklært i WinNT.h som: typedef long LONG;
LONG_PTR 32 / 64 En signert type som en peker kan plasseres i. Erklært i BaseTsd.h som:#if definert(_WIN64) typedef __int64 LONG_PTR; #else typedef long LONG_PTR;#endif
LPARAM 32 / 64 Parameter for å sende meldinger. Erklært i WinNT.h som: typedef LONG_PTR LPARAM;
SIZE_T 32 / 64 Analogt med size_t-typen. Erklært i BaseTsd.h som: typedef ULONG_PTR SIZE_T;
SSIZE_T 32 / 64 Analogt med ptrdiff_t-typen. Erklært i BaseTsd.h som: typedef LONG_PTR SSIZE_T;
ULONG_PTR 32 / 64 En usignert type som kan holde en peker. Erklært i BaseTsd.h som:#if definert(_WIN64) typedef unsigned __int64 ULONG_PTR;#else typedef unsigned long ULONG_PTR;#endif
ORD 16 / 16 Usignert 16-bits type. Erklært i WinDef.h som: typedef unsigned short WORD;
WPARAM 32 / 64 Parameter for å sende meldinger. Erklært i WinDef.h som: typedef UINT_PTR WPARAM;
Tabell N3. Typer av interesse ved portering av 32-biters programmer til 64-biters Windows-systemer. Hvis du tror at etter å ha rettet alle kompileringsfeil vil den etterlengtede 64-bits applikasjonen bli oppnådd, må du bli skuffet. Den vanskeligste delen er ennå ikke kommet. På kompileringsstadiet vil du rette opp de mest åpenbare feilene som kompilatoren kunne oppdage, som hovedsakelig er relatert til umuligheten av implisitt type casting. Men dette er toppen av isfjellet. De fleste feilene er skjult. Fra synspunktet til det abstrakte C++-språket, ser disse feilene trygge ut eller er forkledd av eksplisitte typekast. Det er flere ganger flere slike feil enn antall feil identifisert på kompileringsstadiet.

Du bør ikke sette ditt håp til /Wp64-tasten. Denne nøkkelen blir ofte omtalt som et mirakelverktøy for å finne 64-biters feil. Faktisk gjør /Wp64-svitsjen det bare mulig, når du kompilerer 32-bits kode, å motta noen advarsler om at visse deler av koden vil være feil i 64-biters modus. Ved kompilering av 64-bits kode vil disse advarslene uansett utstedes av kompilatoren. Og derfor, når du kompilerer en 64-bits applikasjon, ignoreres /Wp64-svitsjen. Og enda mer, denne nøkkelen hjelper ikke med å finne skjulte feil.

La oss se på noen få eksempler på skjulte feil. Den enkleste, men ikke den enkleste å oppdage, klassen av feil er assosiert med eksplisitt type casting, der betydelige biter er avskåret. Et vanlig eksempel er å caste pekere til 32-bits typer når de overføres til funksjoner som SendMessage:

MyObj* pObj = ... ::SendMessage(hwnd, msg, (WORD)x, (DWORD)pObj);
Her brukes en eksplisitt type cast for å konvertere en peker til en numerisk type. For en 32-bits arkitektur er eksemplet ovenfor riktig, siden den siste parameteren i SendMessage-funksjonen er av typen LPARAM, som er det samme som DWORD på en 32-bits arkitektur. For 64-bits arkitektur er bruken av DWORD feil og bør erstattes med LPARAM. LPARAM-typen har en størrelse på 32 eller 64 biter, avhengig av arkitekturen.

Dette er et enkelt tilfelle, men ofte ser typebesetningen mer sofistikert ut og kan ikke oppdages ved å bruke kompilatoradvarsler eller søke gjennom programteksten. Eksplisitte typecasts undertrykker kompilatordiagnostikk fordi de er ment å fortelle kompilatoren at typecasten er korrekt og programmereren har akseptert ansvaret for sikkerheten til koden. Et eksplisitt søk hjelper heller ikke. Typer har kanskje ikke standardnavn (spesifisert av programmereren via typedef), og det er også ganske mange måter å implementere eksplisitt typecasting. For å diagnostisere slike feil pålitelig, trenger du bare å bruke spesialverktøy, for eksempel Viva64 eller PC-Lint-analysatorer.

Det neste eksemplet er relatert til en implisitt type cast, som også resulterer i tap av betydelige biter. Fread-funksjonskoden leser fra en fil, men er feil når du prøver å lese mer enn 2 gigabyte med data på et 64-bitssystem.

size_t __fread(void * __restrict buf, size_t size, size_t count, FILE * __restrict fp); size_t fread(void * __restrict buf, size_t size, size_t count, FILE * __restrict fp) ( int ret; FLOCKFILE(fp); ret = __fread(buf, størrelse, count, fp); FUNLOCKFILE(fp); return (ret) ;)
__fread-funksjonen returnerer en size_t-type, men int-typen brukes til å lagre antall leste byte. Som et resultat, med store mengder data som leses, kan funksjonen returnere et annet antall byte enn det som faktisk blir lest. Du kan si at dette er uvitende kode for nybegynnere, at kompilatoren vil rapportere en slik type cast, og at en slik kode generelt er lett å finne og rette. Dette er teoretisk. Men i det virkelige liv, med store prosjekter, kan alt være annerledes. Dette eksemplet er hentet fra FreeBSD-kildekoden. Feilen ble rettet først i desember 2008! Dette til tross for at den første (eksperimentelle) 64-biters versjonen av FreeBSD ble utgitt tilbake i juni 2003. Her er kildekoden før reparasjonen:

http://www.freebsd.org/cgi/cvsweb.cgi/src/lib/libc/stdio/fread.c?rev=1.14

Og her er den korrigerte versjonen (desember 2008):

http://www.freebsd.org/cgi/cvsweb.cgi/src/lib/libc/stdio/fread.c?rev=1.15

Det er lett å gjøre feil i kode som fungerer med individuelle biter. Den neste typen feil er knyttet til skiftoperasjoner. La oss se på et eksempel:

ptrdiff_t SetBitN(ptrdiff_t verdi, usignert bitNum) ( ptrdiff_t maske = 1
Koden ovenfor fungerer på en 32-bits arkitektur og lar deg sette biter nummerert 0 til 31 til en. Etter overføring av programmet til en 64-bits plattform vil det være behov for å sette biter fra 0 til 63. Men denne koden vil aldri sette biter nummerert 32-63. Vær oppmerksom på at "1" er av typen int og når den forskyves med 32 posisjoner vil det oppstå et overløp, som vist i figur 5. Hvorvidt resultatet er 0 (Figur 5-B) eller 1 (Figur 5-C) avhenger av kompilatoren gjennomføring.

Figur 5. A - Korrekt installasjon av 31. bit i en 32-bit kode; B,C - Feil ved innstilling av 32. bit på et 64-bit system (to atferdsalternativer) For å korrigere koden må du lage en konstant "1" av samme type som maskevariabelen:

ptrdiff_t maske = ptrdiff_t(1)
Merk også at ukorrigert kode vil føre til en annen interessant feil. Når du setter 31 biter på et 64-bit system, vil resultatet av funksjonen være verdien 0xffffffff80000000 (se figur 6). Resultatet av uttrykk 1 size_t ArraySize = N * 4; size_t *Array = (size_t *)malloc(ArraySize); Hovedtallene som bør tas med forsiktighet ved bytte til en 64-bits plattform er gitt i tabell N4.

Tabell N4. De viktigste magiske verdiene som er farlige ved overføring av applikasjoner fra en 32-biters til en 64-biters plattform I programmer som behandler store datamengder, kan det oppstå feil knyttet til indeksering av store matriser eller evige løkker. Følgende eksempel inneholder 2 feil samtidig:

const size_t size = ...; char *array = ...; char *end = matrise + størrelse; for (ufortegn i = 0; i != størrelse; ++i) ( const int one = 1; end[-i - one] = 0; )
Den første feilen er at hvis størrelsen på de behandlede dataene overstiger 4 gigabyte (0xFFFFFFFF), kan det oppstå en evig sløyfe, siden variabelen "i" er av typen "unsigned" og aldri vil nå verdien 0xFFFFFFFF. Jeg skriver spesifikt at forekomsten er mulig, men det vil ikke nødvendigvis skje. Det avhenger av hvilken kode kompilatoren bygger. For eksempel, i feilsøkingsmodus vil den evige sløyfen være til stede, men i utgivelseskoden vil sløyfen forsvinne, så kompilatoren vil bestemme seg for å optimalisere koden ved å bruke et 64-bits register for telleren og løkken vil være korrekt. Alt dette øker forvirringen, og kode som fungerte i går kan plutselig slutte å virke dagen etter. Den andre feilen er assosiert med å gå gjennom en matrise fra slutt til begynnelse, som negative indeksverdier brukes for. Ovennevnte kode fungerer i 32-bits modus, men når den kjøres på en 64-bits maskin, på den aller første iterasjonen av løkken, vil arrayet få tilgang utenfor grensene og programmet vil krasje. La oss vurdere årsaken til denne oppførselen. I henhold til C++-språkregelen på et 32-bitssystem, vil uttrykket "-i - one" bli evaluert som følger (i det første trinnet i = 0):
  1. "-i"-uttrykket er av typen usignert og har verdien 0x00000000u.
  2. Variabelen "one" vil utvides fra type "int" til type unsigned og vil være lik 0x00000001u. Merk: Typen int utvides (i henhold til C++ språkstandarden) til å skrive "unsigned" hvis den deltar i en operasjon der det andre argumentet er av typen unsigned.
  3. En subtraksjonsoperasjon oppstår, som involverer to verdier av typen uten fortegn, og resultatet av operasjonen er 0x00000000u - 0x00000001u = 0xFFFFFFFFu. Merk at resultatet er av usignert type.
  4. På et 32-bitssystem tilsvarer tilgang til en matrise ved indeks 0xFFFFFFFFu å bruke indeks -1. Det vil si at slutten er analog med slutten[-1]. Som et resultat blir array-elementet korrekt behandlet.
I et 64-bitssystem i siste avsnitt vil bildet være annerledes. Den usignerte typen vil utvides til fortegnet ptrdiff_t og array-indeksen vil være lik 0x00000000FFFFFFFFi64. Som et resultat vil matrisen være utenfor grensene. For å fikse koden må du bruke typer som ptrdiff_t og size_t. Det er feil som generelt ingen har skylden for, men dette hindrer dem ikke i å være feil. Tenk deg at det for lenge siden i en fjern galakse (i Visual Studio 6.0) ble utviklet et prosjekt som inneholdt CSampleApp-klassen, som er en etterkommer av CWinApp. Basisklassen har en virtuell funksjon kalt WinHelp. Arvingen overstyrer denne funksjonen og utfører de nødvendige handlingene. Dette er visuelt vist i figur 7.

Figur 7. Virker riktig kode som ble opprettet i Visual Studio 6.0 Deretter overføres prosjektet til Visual Studio 2005, hvor prototypen til WinHelp-funksjonen har endret seg, men ingen legger merke til dette, siden i 32-bits modus typene DWORD og DWORD_PTR er de samme og programmet fortsetter å fungere korrekt (Figur 8).

Figur 8. Feil, men brukbar 32-bits kode Feilen venter på å manifestere seg på et 64-bits system, hvor størrelsen på DWORD- og DWORD_PTR-typene er forskjellig (Figur 9). Det viser seg at i 64-bits modus inneholder klassene to ULIKE WinHelp-funksjoner, noe som naturligvis er feil. Vær oppmerksom på at slike feller kan skjules ikke bare i MFC, der noen funksjoner har endret typen argumenter, men også i koden til applikasjonene og tredjepartsbibliotekene dine.

Figur 9. Feilen viser seg i 64-bits kode Eksempler på lignende 64-bits feil kan gis og gis. De som er interessert i slike feil og ønsker å lære mer om dem, vil være interessert i artikkelen "20 fallgruver ved å portere C++-kode til en 64-biters plattform." Som du kan se, er stadiet med å finne skjulte feil en ikke-triviell oppgave, spesielt siden mange av dem vil vises uregelmessig eller bare på store inndatavolumer. Statiske kodeanalysatorer er godt egnet for å diagnostisere slike feil, siden de kan sjekke hele applikasjonskoden, uavhengig av inngangsdata og frekvensen av utførelse av dens seksjoner under reelle forhold. Det er fornuftig å bruke statisk analyse både på stadiet med å portere en applikasjon til 64-biters plattformer for å finne de fleste feilene på det aller første stadiet, og i videreutviklingen av 64-bits løsninger. Statisk analyse vil advare og lære programmereren å bedre forstå funksjonene til feil knyttet til 64-bits arkitekturen og skrive mer effektiv kode. Forfatteren av artikkelen er utvikleren av en av disse spesialiserte kodeanalysatorene, kalt Viva64. Du kan bli kjent med verktøyet mer detaljert og laste ned en demoversjon fra nettstedet til Software Verification Systems LLC-selskapet. For å være rettferdig skal det sies at kodeanalysatorer som Gimpel PC-Lint og Parasoft C++Test har sett med regler for å diagnostisere 64-biters feil. Men for det første er disse analysatorer for generelle formål, og reglene for diagnostisering av 64-biters feil er dårlig representert i dem. For det andre er de mer fokusert på LP64-datamodellen som brukes i Linux-operativsystemfamilien, noe som reduserer nytten for Windows-programmer som bruker LLP64-datamodellen. Trinnet med å finne feil i programkoden beskrevet i forrige avsnitt er et nødvendig, men ikke tilstrekkelig trinn. Ingen metode, inkludert statisk kodeanalyse, gir en fullstendig garanti for å oppdage alle feil, og det beste resultatet kan kun oppnås ved å kombinere forskjellige teknikker.

Hvis 64-biters programmet ditt behandler mer data enn 32-bits versjonen, må du utvide testene til å inkludere behandling av data større enn 4 gigabyte. Dette er grensen som mange 64-biters feil begynner å manifestere seg utenfor. Slike tester kan ta en størrelsesorden lenger og du må være forberedt på dette på forhånd. Typisk er tester skrevet på en slik måte at man behandler et lite antall elementer i hver test og dermed kan bestå for eksempel alle interne enhetstester? på noen få minutter, og automatiserte tester (for eksempel ved å bruke AutomatedQA TestComplete) på noen få timer. En sorteringsfunksjon på et 32-bits system, hvis den sorterer 100 elementer, er nesten garantert å oppføre seg riktig på 100 000 elementer. Men den samme funksjonen på et 64-bits system kan mislykkes når man prøver å behandle 5 milliarder elementer. Utførelseshastigheten til en enhetstest kan reduseres med millioner av ganger. Ikke glem å ta med kostnadene ved å tilpasse tester når du mestrer 64-bits systemer. En løsning er å dele enhetstester i raske (arbeider med en liten mengde minne) og trege, behandler gigabyte og kjører for eksempel om natten. Automatisert testing av ressurskrevende 64-bits programmer kan bygges på grunnlag av distribuert databehandling.

Datamaskinen din kjører mest sannsynlig en 64-biters versjon av Windows. Men hvis du åpner Task Manager, vil du se at de fleste programmene på systemet ditt fortsatt er 32-bit. Er dette virkelig et problem?

Det er mange forskjeller mellom 64-biters og 32-biters versjoner av Windows. 64-biters versjoner av Windows kan kjøre 32-biters programvare, men 32-biters versjoner av Windows kan ikke kjøre 64-biters programvare.

Hvordan finne ut bitdybden til et program?

La oss bruke Task Manager for å se hvilke av programmene dine som er 64-bit og hvilke som er 32-bit. Høyreklikk på oppgavelinjen og velg Oppgavebehandling eller trykk Ctrl + Shift + Esc for å åpne den.

Se på kolonnen med prosessnavn. Hvis du bruker en 64-biters versjon av Windows 8.1 eller 8, vil du se ordet "(32-bit)" etter hver 32-biters versjon av programnavnet. Hvis du bruker 64-biters versjonen av Windows 7, vil du se "*32" i stedet.

32-biters programmer er vanligvis installert i mappen C:\Program Files (x86)\ på 64-biters versjoner av Windows, mens 64-biters programmer vanligvis installeres i mappen C:\Program Files\.
Det er bare en regel. Men ingen sier at det ikke er noen annen regel som forbyr installasjon av 64-biters programmer i mappen C:\Program Files (x86)\. For eksempel er Steam et 32-bitsprogram, så det installeres i "C:\Program Files (x86)\" som standard. Spillene du installerer på Steam er som standard installert i mappen C:\Program Files (x86)\Steam, inkl. til og med 64-biters versjoner av spill.

Hvis du sammenligner to forskjellige Program Files-mapper, vil du finne at de fleste av programmene dine sannsynligvis er installert i mappen C:\Program Files (x86). Og disse programmene er stort sett 32-biters.

Kjører 32-biters programvare på et 64-biters operativsystem

Ved første øyekast virker det forferdelig at de fleste av Windows-programmene dine ikke bruker 64-biters operativsystemarkitektur. Du tror kanskje at det er en ytelsesstraff for å kjøre 32-biters programmer på et 64-biters operativsystem, men dette er ikke tilfelle.

Windows kjører 32-biters programmer gjennom WoW64-kompatibilitetsnivået på 64-biters versjoner av Windows. Imidlertid er 64-biters Intel- og AMD-prosessorer bakoverkompatible og kan kjøre 32-biters programvare direkte. Alle dine 32-biters Windows-programmer vil kjøre akkurat som de ville på en 32-biters versjon av Windows. Dermed er det ingen hindring for å kjøre disse programmene på et 64-bits operativsystem.

Selv om hvert program du bruker fortsatt er 32-bit, vil du dra nytte av det fordi operativsystemet i seg selv vil kjøre i 64-bits modus. Og 64-biters versjonen av Windows er sikrere.

64-bits programmer og 32-biters programmer: hva er bedre?

32-biters programmer kjører uten problemer på 64-biters versjoner av Windows-operativsystemer. Men ville det vært bedre om alle programmene dine var 64-biters?

Det er definitivt fordeler med 64-bits programmer. 32-bits programmer kan bare bruke 2 GB minne, mens 64-bits programmer kan bruke mye mer. Hvis et program sannsynligvis vil bli angrepet, kan ytterligere sikkerhetsfunksjoner brukt på 64-biters programmer hjelpe. Google Chrome er for tiden en 32-bits applikasjon selv på 64-biters versjoner av Windows, men en 64-bits betaversjon av dette programmet har allerede dukket opp. Og Google lover at 64-biters versjonen av Chrome skal være raskere, sikrere og mer stabil.

Noen programmer tilbyr 64-bitsversjoner. For eksempel: Photoshop, iTunes, Microsoft Office og noen av de mest populære Windows-programmene, og de er alle tilgjengelige i 64-biters form. Siste spill er også ofte 64-bit slik at de kan bruke mer enn 2 GB minne.

Mange programmer har ikke gått over til 64-bit, og de fleste vil aldri gjøre det. Du kan fortsatt kjøre de fleste 32-biters Windows-programmer i dag, selv de som ble utgitt for ti år siden, på en 64-biters versjon av Windows, selv om utviklerne deres allerede har oppdatert dem.

En utvikler som ønsker å tilby en 64-bits versjon av programmet må gjøre mye ekstra arbeid. Han må sørge for at den eksisterende koden kompileres og kjører riktig som 64-bits programvare. Den må tilby og støtte to separate versjoner av programmet, siden brukere som kjører en 32-biters versjon av Windows ikke kan bruke 64-biters versjonen.

La oss ta Evernote for Windows-skrivebordet som et eksempel. Selv om de ga ut en 64-biters versjon av Evernote, vil brukerne sannsynligvis ikke merke forskjellen i det hele tatt. Et 32-bitsprogram kan kjøre helt fint på en 64-biters versjon av Windows, og hvis det ikke er noen merkbare fordeler, er det ingen vits i å ha en 64-biters versjon.

Hvor finner du 64-bits applikasjoner

Du vil vanligvis ikke kunne velge mellom 32-biters og 64-biters versjoner av programvaren. Når du for eksempel installerer iTunes for Windows, leder Apples nettsted deg automatisk til enten 32-biters eller 64-biters versjonen av installasjonsprogrammet, avhengig av hvilken versjon av Windows du har. Når du installerer Photoshop for Windows, installerer du vanligvis både 32-biters og 64-biters kjørbare filer. Photoshop velger automatisk fra dem. Noen ganger kan du se separate nedlastingslenker for 32-biters og 64-biters versjoner av programmer, men dette er ikke så vanlig.

Det viktige er ikke å søke etter 64-bits applikasjoner, men å finne applikasjoner som fungerer bra for deg. For de fleste applikasjoner spiller det ingen rolle om versjonen er 64-bit eller 32-bit.

Det er lett å lure på hvorfor så mange applikasjoner fortsatt er 32-bit når du åpner oppgavebehandlingen. Men dette er ikke et veldig stort problem, og her er hvorfor. Fordi de fleste applikasjoner ikke får noe når de bytter til 64-biters utgaver av programmer. Selv om utviklerne gjorde alt arbeidet og ga ut 64-bitsversjoner av alle de små skrivebordsapplikasjonene og verktøyene du bruker på Windows, ville du ikke kunne se forskjellen for de fleste av dem.

]. Men 32-bits OSer er fortsatt til stede på markedet i ganske store mengder. Mange moderne programvareverktøy er utviklet utelukkende for å fungere i 64-biters modus, siden det å sikre funksjonaliteten til programmet i både 32-bit og 64-bit OS krever ekstra arbeidskostnader, og følgelig øker utviklingskostnadene.

For brukere av et 32-bits OS er det noen ganger behov for å bruke programvare som kun er utviklet for et 64-biters OS. Hva skal jeg gjøre hvis brukeren ikke er klar til å gi opp 32-bits OS som hovedarbeidssystem?

Ulike operativsystemer har sine egne særegenheter knyttet til å kjøre 64-bits applikasjoner i et 32-bits miljø. Når du kjører en 64-bits applikasjon direkte i et 32-bits miljø, går fordelen forbundet med muligheten til å bruke mer RAM tapt. For å støtte 64-bits applikasjoner, må prosessoren din ha en 64-bits arkitektur. La oss se på noen av de mest populære operativsystemene.

Mac OS X har en hybridkjerne. Den lar alle applikasjoner fungere likt, uansett om de er 32-biters eller 64-biters. Den eneste forskjellen mellom en hybridkjerne og en full 64-bit er manglende evne til å bruke mer enn 32 GB RAM i systemet. Derfor er det for øyeblikket absolutt ingen forskjell mellom oppstart i 32-biters og 64-biters modus. Men i fremtiden vil forskjellen definitivt vises når volumet av RAM-bruken øker og nye teknologier dukker opp.

For operativsystemer i Linux-familien og 32-biters operativsystemer i Windows-familien, kjøres 64-bits applikasjoner i et 32-bits miljø ved hjelp av virtualiseringsteknologier. Det finnes en rekke spesialiserte programvareprodukter som lar deg installere et virtuelt gjeste-64-biters OS, der du kan installere programmet du trenger og starte det. På samme tid, hvis det installerte operativsystemet er betalt, vil du bli tvunget til å kjøpe det.

Virtualisering