Jak spustit 32bitový program na 64 windows 7

Většina moderních her jako Overwatch, Hurtworld nebo Subnautica může běžet pouze na 64bitových operačních systémech. Pro tvůrce těchto programů se prostě nevyplácí dělat různé verze aplikací pro 32- a 64-bit. I když obě verze jsou celkem běžné. Přechod na x64 je samozřejmě dostatečně snadný. Ale co když se nechystáte upgradovat svůj OS a přesto se chcete podívat na oblíbenou hru? Naučte se spouštět Subnautica a další 64bitové programy na 32bitovém systému.

K tomu je nutné, aby počítač splňoval požadavky nutné pro běžný provoz aplikace. Procesor musí mít zpočátku architekturu x64.

Jak se liší 32bitový systém od 64bitového?

Proč nelze programy určené pro 64bit otevřít na 32bit? Jak se tyto verze tak liší, když na nich nefungují stejné aplikace? A když lze Overwatch spustit na x64, proč to nelze hrát na stejném počítači, ale s x32?

Záleží na systému, kolik RAM může být nainstalováno na PC a kolik je schopen přidělit každé konkrétní aplikaci. V x64 je maximální množství paměti RAM 16 GB (ve Windows 7 Professional - až 192 GB). V tomto případě je poskytován jakýkoli nástroj až do velikosti 4 GB. Ve verzi x32 jsou tato čísla mnohem menší – maximálně 4 GB a 2 GB pro samostatný program.

Bitová rychlost procesoru určuje, jak zpracovává informace. To výrazně ovlivňuje výkon - v 64bit je mnohem lepší. K dispozici je více registrů pro ukládání dat a zátěž je rozložena na všechna jádra najednou. A v 32bitovém OS se druhé jádro aktivuje, když je první plně obsazeno.

Na "slabé" stroje nainstalujte x32. Pokud PC nemá moc RAM a ne zrovna nejlepší procesor, tak s 64 bit prostě nemá smysl pracovat. Tím dojde pouze k „přetížení“ elektronického počítače, aniž by se přidal na jeho výkonu. Ale výkonný x64 počítač bude jen na místě.

Přestože jsou tyto systémy vzhledově podobné, na softwarové úrovni se velmi liší. Mají jinou sadu ovladačů, takže Subnautica, Overwatch, Hurtworld a další podobné nebudou fungovat na 32bitovém OS, i když má PC potřebné vlastnosti.

Moderní hry, aplikace, programy na úpravu grafiky nebo videa nestačí na 2 GB, které jim x32 přiděluje. Linkeři nových her vytvářejí své produkty s ohledem na x64.

Jak zjistit, zda procesor podporuje x64?

Chcete-li zjistit, jaký operační systém máte nainstalovaný, můžete provést toto:

  1. Na ploše klikněte pravým tlačítkem myši na ikonu „Tento počítač“.
  2. Položka "Vlastnosti". Lze jej také nalézt v Ovládacích panelech.
  3. Řádek "Typ" udává, kolik bitů má vaše verze operačního systému.

Nejprve musíte pochopit, na jakém systému pracujete.

Než spustíte Overwatch na 32bitovém systému, zjistěte si, zda váš počítač takovou hru zvládne. Zkontrolujte, zda procesor podporuje 64bitové instrukce. To lze provést pomocí speciálních testovacích programů. Vhodná je například bezplatná utilita „SecurAble“. Není nutné jej instalovat. A proto není nutné jej po použití odstraňovat. Stačí spustit spustitelný soubor. Zobrazí se informace o procesoru: název, takt, bitová hloubka, zda podporuje D.E.P (toto je ochrana proti přetečení vyrovnávací paměti pro zařízení) a hardwarové vykreslování. Na kterýkoli z výsledků můžete kliknout – zobrazí se jeho popis.

Kontrola podpory procesoru pro 64bitové instrukce

Pokud program vydá verdikt „Maximum 32 bit“, pak aplikace určené pro x64 pravděpodobně nebudou fungovat. Chcete-li hrát Overwatch nebo Hurtword, budete muset vyměnit procesor nebo zlikvidovat vzdálené servery.

Jak převést 32bitový systém na 64bitový?

Pro takzvanou virtualizaci existuje několik utilit. Emulují práci nějaké platformy s určitým softwarem a hardwarem. Pokud potřebujete zjistit, jak spustit Hurtworld na 32bitovém systému, použijte jeden z těchto nástrojů.

Tyto programy vytvářejí jakýsi „hostující“ OS. Ale v každém případě musí být nainstalována a zakoupena licencovaná verze, pokud je placená. Chcete-li to provést, musíte mít disk (nebo obraz disku) s operačním systémem, který potřebujete.

Oracle Virtual Box

Univerzální program pro takové úkoly.

  1. Nainstalujte jej a spusťte. Vlevo bude seznam nainstalovaných OS a panel nástrojů. Vpravo - informace o vybraném systému.
  2. Klikněte na tlačítko "Vytvořit". Zobrazí se informační okno. Klepněte na tlačítko Další.
  3. Vyberte typ a verzi operačního systému. Na výběr je mnoho možností: nejen Microsoft Windows, ale i Linux.
  4. Poté se budete muset rozhodnout, kolik paměti RAM přidělit „hostujícímu“ systému.
  5. Poté musíte vytvořit virtuální disk (na který budou zapsány soubory OS). Můžete si vybrat stávající nebo vytvořit nový. A zaškrtněte políčko vedle možnosti "Start Disk".
  6. V dalším okně zkontrolujte, zda bude svazek pro disk pevný nebo dynamický (měnící se). Každá položka má podrobné vysvětlení. Boot je lepší opravit. Později můžete přidat další disky.
  7. Upravte velikost virtuálního úložiště. Obvykle stačí 10 GB. Je lepší jej vytvořit na samostatném místě - ne tam, kde je nainstalován hlavní systém.
  8. Počkejte až do konce procesu. V seznamu dostupných se objeví nový.

Jedním ze způsobů je použití virtualizačních nástrojů

Poté, co můžete nakonfigurovat hardware:

  1. Vyberte hostující OS a klikněte na Vlastnosti.
  2. V části Obecné - Pokročilé změňte složku pro ukládání obrázků na tu, která vám vyhovuje.
  3. Nastavte tam schránku. Určuje, jak budou informace přenášeny mezi různými operačními systémy.
  4. V záložce "Systém" můžete vybrat vlastnosti virtuální základní desky a procesoru.
  5. Položka "Network" je potřebná pro konfiguraci přístupu k World Wide Web. Můžete ponechat výchozí nastavení.
  6. V části "Média" zadejte, odkud chcete získat operační systém. Pokud je instalační program na disku CD, vložte jej do jednotky. Pro stažení z .ISO klikněte na tlačítko "Otevřít" vedle seznamu "Drive". Vypadá to jako žlutá složka.
  7. Můžete tam také přidat další obrázky a rychle mezi nimi přepínat: databáze, aplikace, hry.

Po dokončení nastavení klikněte na „OK“. Chcete-li spustit hostující OS, klikněte na něj a na tlačítko "Start". Instalace proběhne. A můžete přepínat mezi systémy: hrát v 64bitové verzi a pracovat v 32bitové verzi.

Další virtuální stroje

Existují také nástroje pro práci s virtuálními stroji:

  • Pracovní stanice VMware. Seriózní profesionální program pro složité úkoly. Distribuuje se na placené bázi.
  • Jednoduchý nástroj pro emulaci hardwaru. Má otevřený zdrojový kód.
  • Windows Virtual PC. Funguje pouze se systémy Windows. Můžete nastavit prioritu procesů - takže zdroje budou automaticky přiděleny online stroji, pokud provede určitou úlohu.
  • VirtManager. Poskytuje dostatek příležitostí pro nastavení hardwarové komponenty – virtuální hardware je k dispozici pro každého.

Cloud computing (vzdálené servery)

Pokud výkon stále nestačí ke spuštění hry, můžete to udělat na vzdáleném serveru. Budou na něm zpracovány veškeré výpočty, veškeré informace. Tak vám nebudou překážet žádná omezení spojená s x32. Ve skutečnosti se aplikace „otevřou“ na vhodných systémech. Jen ne na vašem počítači.

K tomu je vhodný program Microsoft Azure. S jeho pomocí můžete vytvořit několik operačních systémů pro různé účely. Fanoušci her budou také těžit ze specializované služby virtualizace grafických karet NVIDIA GRID. Tyto služby potřebují vysokorychlostní internet.

Nejmodernější cloudové služby rozšiřují naše možnosti

Práce s 64bitovými aplikacemi na 32bitovém systému je docela možná. Musíte však nainstalovat další software nebo obecně přejít na vzdálený server. To je docela obtížné. Pokud chcete plnohodnotně hrát Overwatch, Hurtword a další oblíbené hry, je lepší nainstalovat OS x64. Nebudou tedy žádné problémy s kompatibilitou. A nemusíte nic nastavovat.

NastroyVse.ru

windows x64 - Proč je stále tolik 32bitových programů?

Váš počítač s největší pravděpodobností používá 64bitovou verzi systému Windows. Pokud však otevřete Správce úloh, uvidíte, že většina programů ve vašem systému je stále 32bitová. Je to opravdu problém? Mezi 64bitovou a 32bitovou verzí oken je mnoho rozdílů. 64bitové verze systému Windows mohou spouštět 32bitový software, ale 32bitové verze systému Windows nemohou provozovat 64bitový software.

Jak zjistit bitovost programu?

Pojďme pomocí Správce úloh zjistit, které z vašich programů jsou 64bitové a které 32bitové. Klikněte pravým tlačítkem na hlavní panel a vyberte Správce úloh nebo jej otevřete stisknutím Ctrl + Shift + Esc. Podívejte se na sloupec s názvy procesů. Pokud používáte 64bitovou verzi systému Windows 8.1 nebo 8, uvidíte za každým názvem 32bitového programu slovo „(32-bit)“. Pokud používáte 64bitovou verzi systému Windows 7, uvidíte místo toho „*32“. 32bitové programy se obvykle instalují do složky C:\Program Files (x86)\ v 64bitových verzích systému Windows, zatímco 64bitové programy se obvykle instalují do složky C:\Program Files\. To je prostě pravidlo. Nikdo ale neříká, že neexistuje žádné jiné pravidlo, které by zakazovalo instalaci 64bitových programů do složky C:\Program Files (x86)\. Například Steam je 32bitový program, takže se standardně instaluje do "C:\Program Files (x86)\". Hry, které nainstalujete na Steam, se ve výchozím nastavení instalují do složky C:\Program Files (x86)\Steam, vč. dokonce i 64bitové verze her. Pokud porovnáte dvě různé složky Program Files, zjistíte, že většina vašich programů je s největší pravděpodobností nainstalována ve složce C:\Program Files (x86). A většina těchto programů je 32bitových.

Spuštění 32bitového softwaru na 64bitovém operačním systému

Na první pohled se zdá hrozné, že většina vašich programů pro Windows nepoužívá architekturu 64bitového operačního systému. Možná si myslíte, že za spouštění 32bitových programů na 64bitovém operačním systému existuje omezení výkonu, ale není tomu tak. Windows spouští 32bitové programy prostřednictvím vrstvy kompatibility WoW64 na 64bitových verzích oken. 64bitové procesory Intel a AMD jsou však zpětně kompatibilní a mohou přímo spouštět 32bitový software. Všechny vaše 32bitové programy pro Windows budou fungovat stejně jako ve 32bitové verzi pro Windows. Neexistují tedy žádné překážky pro spouštění těchto programů na 64bitovém operačním systému. I když je každý program, který používáte, stále 32bitový, budete z toho mít prospěch, protože váš operační systém poběží v 64bitovém režimu. 64bitová verze systému Windows je bezpečnější.

64bitové programy vs. 32bitové programy: co je lepší?

32bitové programy běží bez problémů na 64bitových verzích operačních systémů Windows. Ale bylo by lepší, kdyby všechny vaše programy byly 64bitové? 64bitové programy mají určitě své výhody. 32bitové programy mohou využívat pouze 2 GB paměti, zatímco 64bitové programy mohou využívat mnohem více. Pokud je program s největší pravděpodobností napaden, mohou pomoci další bezpečnostní funkce aplikované na 64bitové programy. Google Chrome je v současnosti 32bitová aplikace i na 64bitových verzích operačního systému Windows, ale již se objevila 64bitová beta verze tohoto programu. A Google slibuje, že 64bitová verze Chrome bude rychlejší, bezpečnější a stabilnější. Některé programy nabízejí 64bitové verze. Například: Photoshop, iTunes, Microsoft Office a některé z nejpopulárnějších programů pro Windows, všechny dostupné v 64bitové verzi. Nejnovější hry jsou také často 64bitové, takže mohou využívat více než 2 GB paměti. Mnoho programů nepřešlo na 64bitovou verzi a většina nikdy nepřejde. Většinu 32bitových programů pro Windows můžete i dnes spouštět, dokonce i ty vydané před deseti lety, na 64bitové verzi Windows, i když jejich vývojáři již aktualizují. Vývojář, který chce poskytnout 64bitovou verzi svého programu, musí udělat spoustu práce navíc. Musí zajistit, aby se stávající kód zkompiloval a fungoval správně jako 64bitový software. Musí poskytovat a podporovat dvě samostatné verze programu, protože uživatelé s 32bitovou verzí systému Windows nemohou používat 64bitovou verzi. Vezměme si jako příklad desktopovou verzi systému Windows Evernote. I kdyby vydali 64bitovou verzi Evernote, uživatelé by si rozdílu pravděpodobně vůbec nevšimli. 32bitový program může fungovat dobře na 64bitové verzi systému Windows, a pokud neexistují žádné znatelné výhody, nemá smysl 64bitová verze.

Kde najít 64bitové aplikace

Obecně si nebudete moci vybrat mezi 32bitovou a 64bitovou verzí softwaru. Například při instalaci iTunes pro Windows vás web Apple automaticky přesměruje na 32bitový nebo 64bitový instalační program v závislosti na verzi systému Windows. Instalace Photoshopu pro Windows obvykle nainstaluje 32bitové i 64bitové spustitelné soubory. Photoshop z nich automaticky vybírá. Někdy můžete vidět samostatné odkazy ke stažení pro 32bitové a 64bitové verze programů, ale není to tak běžné. Důležité není hledat 64bitové aplikace, ale najít aplikace, které vám dobře fungují. U většiny aplikací je v podstatě jedno, zda je 64bitový nebo 32bitový.

Je snadné se divit, proč je tolik aplikací stále 32bitových, když otevřete správce úloh. Ale to není příliš velký problém a zde je důvod. Protože většina aplikací přechodem na 64bitové edice programů nic nezíská. I kdyby vývojáři udělali všechnu práci a vydali 64bitové verze všech malých desktopových aplikací a nástrojů, které používáte ve Windows, u většiny z nich byste nebyli schopni poznat rozdíl.

itchief.ru

7 kroků pro portování programu na 64bitový systém

Článek pojednává o hlavních krocích k zajištění správného portování aplikací 32bitových oken na 64bitové systémy Windows. Přestože je článek zaměřen na vývojáře používající jazyk C/C++ ve Visual Studiu 2005/2008, bude užitečný i pro ostatní vývojáře, kteří plánují portovat své aplikace na 64bitové systémy. Článek popisuje hlavní problémy, kterým čelí vývojáři, kteří plánují migraci 32bitových programů na 64bitové systémy. Výčet zvažovaných problémů samozřejmě není úplný, ale rád bych doufal, že časem bude nabídnuta rozšířená verze tohoto článku. Autor bude vděčný za zpětnou vazbu, komentáře a dotazy, které zlepší informační obsah tohoto článku. V rámci počítačové architektury se termín "64-bit" týká 64-bitových celých čísel a jiných typů dat o velikosti 64 bitů. "64bitové" systémy mohou odkazovat na 64bitové architektury mikroprocesorů (např. EM64T, IA-64) nebo 64bitové operační systémy (např. Windows XP Professional x64 Edition). AMD64 (aka x86-64, Intel 64, EM64T, x64) je 64bitová architektura mikroprocesoru a odpovídající instrukční sada vyvinutá společností AMD. Tato instrukční sada byla licencována společností Intel pod názvem EM64T (Intel64). Architektura AMD64 je rozšířením architektury x86 s plnou zpětnou kompatibilitou. Architektura se rozšířila jako základ pro osobní počítače a pracovní stanice. IA-64 je 64bitová architektura mikroprocesoru vyvinutá společně společnostmi Intel a Hewlett Packard. Implementováno v mikroprocesorech Itanium a Itanium 2. Architektura se používá především u multiprocesorových serverů a clusterových systémů. AMD64 a IA-64 jsou dvě různé 64bitové architektury, které nejsou vzájemně kompatibilní. Proto by se vývojáři měli okamžitě rozhodnout, zda je nutné podporovat obě tyto architektury nebo pouze jednu. Ve většině případů, pokud nevyvíjíte vysoce specializovaný software pro clusterové systémy nebo neimplementujete vlastní vysoce výkonné DBMS, pak s největší pravděpodobností potřebujete implementovat podporu pouze pro architekturu AMD64, která je mnohem rozšířenější než IA-64. To platí zejména pro software pro trh osobních počítačů, který je téměř ze 100 procent obsazen architekturou AMD64. Dále v článku budeme hovořit pouze o architektuře AMD64 (EM64T, x64), protože její použití je nyní pro vývojáře aplikačního softwaru nejdůležitější.

Když už mluvíme o různých architekturách, měli bychom zmínit koncept "Datový model". Datový model je třeba chápat jako poměr dimenzí typů přijatých v rámci vývojového prostředí. Pro jeden operační systém může existovat několik vývojových nástrojů, které dodržují různé datové modely. Většinou ale převládá pouze jeden model, který je nejvhodnější pro hardwarové a softwarové prostředí. Příkladem je 64bitový operační systém Windows, ve kterém je nativním datovým modelem LLP64. Kvůli kompatibilitě však 64bitový systém Windows podporuje provádění 32bitových programů, které pracují v režimu datového modelu ILP32LL. Tabulka N1 poskytuje informace o hlavních datových modelech.


Tabulka N1. Datové modely

Použitý datový model zanechává otisk v procesu vývoje 64bitových aplikací, protože v programovém kódu je nutné vzít v úvahu bitovost použitých dat.

Měli byste začít ovládat 64bitové systémy otázkou „Potřebujeme náš projekt přestavět na 64bitový systém?“. Na tuto otázku je třeba odpovědět, ale beze spěchu a přemýšlení. Na jedné straně můžete zaostávat za svými konkurenty tím, že včas nenabídnete 64bitová řešení. Na druhou stranu můžete ztrácet čas na 64bitové aplikaci, která vám žádné konkurenční výhody nepřinese. Uvádíme hlavní faktory, které vám pomohou při výběru. Neměli byste vytvářet 64bitovou verzi aplikace s krátkým životním cyklem. Staré 32bitové aplikace díky subsystému WOW64 docela dobře fungují na 64bitových windows systémech a proto nemá smysl dělat 64bitový program, který za 2 roky již nebude podporován. Praxe navíc ukázala, že přechod na 64bitové verze Windows byl zpožděn a většina vašich uživatelů bude pravděpodobně krátkodobě používat pouze 32bitovou verzi vašeho softwarového řešení. Pokud plánujete dlouhodobý vývoj a dlouhodobou podporu softwarového produktu, pak byste měli začít pracovat na 64bitové verzi vašeho řešení. To lze provést pomalu, ale mějte na paměti, že čím déle nemáte plnohodnotnou 64bitovou verzi, tím větší potíže mohou nastat s podporou takové aplikace nainstalované na 64bitových verzích oken. Překompilování programu pro 64bitový systém mu umožní využít obrovské množství paměti RAM a zrychlit jeho provoz o 5-15%. K 5-10% zrychlení dojde v důsledku využití architektonických možností 64bitového procesoru, např. většího počtu registrů. Další 1%-5% nárůst rychlosti je způsoben absencí vrstvy WOW64, která překládá volání API mezi 32bitovými aplikacemi a 64bitovým operačním systémem. Pokud váš program nepracuje s velkým objemem dat (více než 2 GB) a rychlost jeho provozu není kritická, není přechod na 64bitový systém v blízké budoucnosti tak naléhavý. Mimochodem, i jednoduché 32bitové aplikace mohou těžit z jejich provozu v 64bitovém prostředí. Pravděpodobně víte, že program zkompilovaný pomocí přepínače /LARGEADDRESSAWARE:YES může alokovat až 3 gigabajty paměti, pokud je 32bitový operační systém Windows spuštěn přepínačem /3gb. Stejný 32bitový program běžící na 64bitovém systému dokáže alokovat téměř 4 GB paměti (v praxi asi 3,5 GB). Pokud vyvíjíte knihovny, komponenty nebo jiné prvky, které vývojáři třetích stran používají k sestavení svého softwaru, musíte rychle vytvořit 64bitovou verzi svého produktu. V opačném případě budou vaši zákazníci se zájmem o vydání 64bitových verzí nuceni hledat alternativní řešení. Například někteří vývojáři softwarové a hardwarové ochrany reagovali s velkým zpožděním na objevení se 64bitových programů, což donutilo řadu klientů hledat jiné nástroje k ochraně svých programů. Další výhodou vydání 64bitové verze knihovny je, že ji můžete prodávat jako samostatný produkt. Vaši zákazníci, kteří chtějí vytvářet 32bitové i 64bitové aplikace, si tedy budou muset zakoupit 2 různé licence. Tuto zásadu používá například společnost Spatial Corporation při prodeji knihovny Spatial ACIS. Před plánováním práce na vytvoření 64bitových verzí vašeho produktu zjistěte, zda existují 64bitové verze knihoven a komponent, které používá. Zjistěte také, jaká je cenová politika pro 64bitovou verzi knihovny. To vše lze zjistit na webových stránkách vývojáře knihovny. Pokud není podpora, hledejte předem alternativní řešení, která podporují 64bitové systémy. Pokud ve svých řešeních stále máte 16bitové moduly, pak je čas se jich zbavit. Práce 16bitových aplikací v 64bitových verzích systému Windows není podporována. Zde by měl být objasněn jeden bod související s používáním 16bitových instalačních programů. Stále se používají k instalaci některých 32bitových aplikací. Byl vytvořen speciální mechanismus, který za běhu nahrazuje řadu nejoblíbenějších 16bitových instalátorů novějšími verzemi. To může vést k mylné představě, že 16bitové programy stále běží v 64bitovém prostředí. Pamatujte, není. Nezapomeňte, že použití velkého množství kódu assembleru může výrazně zvýšit náklady na vytvoření 64bitové verze aplikace. Po zvážení všech výše uvedených faktů, všech pro a proti se rozhodněte, zda byste měli svůj projekt portovat na 64bitové systémy. A pokud ano, tak pojďme dál. Pokud jste se rozhodli vyvinout 64bitovou verzi svého produktu a jste ochotni tomu věnovat čas, úspěch to nezaručuje. Faktem je, že musíte mít všechny potřebné nástroje a může dojít k nepříjemným incidentům.

Nejjednodušším, ale také nejnepřekonatelnějším problémem může být absence 64bitového kompilátoru. Článek je napsán v roce 2009, ale stále neexistuje žádný 64bitový kompilátor C++ Builder od Codegear. Jeho vydání se očekává až do konce letošního roku. Neexistuje způsob, jak tento problém obejít, pokud samozřejmě nepřepíšete celý projekt, například pomocí Visual Studia. Ale pokud je vše jasné s nedostatkem 64bitového kompilátoru, pak se další podobné problémy mohou ukázat jako skrytější a objevit se již ve fázi přenosu projektu na novou architekturu. Proto bych vám chtěl poradit, abyste si předem provedli studii, zda existují všechny potřebné komponenty, které budou nutné k implementaci 64bitové verze vašeho produktu. Mohou vás čekat nepříjemná překvapení.

Není samozřejmě možné zde vyjmenovat vše, co může být pro projekt potřeba, ale přesto nabídnu seznam, který vám pomůže zaměřit se a případně si zapamatovat další body, které jsou nutné pro realizaci vašeho 64bitového projektu: Je Těžko říci něco jiného o důležitosti 64bitového kompilátoru. Prostě musí být. Pokud plánujete vyvíjet 64bitové aplikace pomocí nejnovější verze (v době psaní tohoto článku) sady Visual Studio 2008, následující tabulka N2 vám pomůže určit, kterou edici sady Visual Studio potřebujete.

Tabulka N2. Možnosti různých edic Visual Studio 2008 Samozřejmě můžete používat virtuální stroje ke spouštění 64bitových aplikací na 32bitovém zařízení, ale to je extrémně nepohodlné a nezajistí potřebnou úroveň testování. Je žádoucí, aby ve strojích bylo nainstalováno alespoň 4-8 gigabajtů paměti RAM. Pokud jsou knihovny prezentovány ve zdrojových kódech, musí být přítomna 64bitová konfigurace projektu. Upgradovat knihovnu tak, aby byla vytvořena pro 64bitový systém vlastními silami, může být nevděčným a obtížným úkolem a výsledek se může ukázat jako nespolehlivý a obsahovat chyby. Můžete tím také porušit licenční smlouvy. Pokud používáte knihovny jako binární moduly, měli byste také zjistit, zda existují 64bitové moduly. V 64bitové aplikaci nebudete moci používat 32bitové knihovny DLL. Je možné vytvořit vlastní postroj přes COM, ale to by byl sám o sobě velký a složitý úkol. Upozorňujeme také, že nákup 64bitové verze knihovny může stát další peníze. Visual C++ nepodporuje 64bitový inline assembler. Musíte buď použít externí 64bitový assembler (např. MASM) nebo mít implementaci C/C++ stejné funkce. Významná revize metodiky testování, modernizace unit testů, využití nových nástrojů. To bude podrobněji probráno níže, ale nezapomeňte to vzít v úvahu při odhadování času stráveného migrací aplikace do nového systému. Pokud vyvíjíte aplikace náročné na zdroje, které spotřebovávají velké množství paměti RAM, musíte se postarat o doplnění základny testovacích vstupních dat. Při zátěžovém testování 64bitových aplikací je žádoucí překročit 4 gigabajty spotřebované paměti. Mnoho chyb se může objevit pouze za takových podmínek. Použitý ochranný systém musí podporovat 64bitové systémy v plném rozsahu, který potřebujete. Například společnost Aladdin rychle vydala 64bitové ovladače pro podporu hardwarových klíčů Hasp. Ale velmi dlouhou dobu neexistoval žádný automatický ochranný systém pro 64bitové binární soubory (program Hasp Envelop). Ochranný mechanismus tedy musel být implementován nezávisle uvnitř programového kódu, což byl další složitý úkol, který vyžadoval dovednosti a čas. Nezapomeňte na takové momenty související s poskytováním ochrany, systémem aktualizací a tak dále. Potřebujete nový instalační program schopný plně nainstalovat 64bitové aplikace. Hned bych zde upozornil na jednu tradiční chybu. Toto je vytvoření 64bitových instalačních programů pro instalaci 32/64bitových softwarových produktů. Při přípravě 64bitové verze aplikace chtějí vývojáři často dovést „64bitovou“ v ní do absolutní podoby. A vytvoří 64bitový instalátor, přičemž zapomenou, že uživatelé 32bitového operačního systému takový instalační balíček prostě nespustí. Upozorňujeme, že se nespustí 32bitová aplikace, která je součástí distribuce spolu s 64bitovou, ale samotný instalátor. Pokud je totiž distribuční sada 64bitová aplikace, pak samozřejmě nepoběží na 32bitovém operačním systému. Nejotravnější na tom je, že uživatel nebude schopen odhadnout, co se děje. Jednoduše uvidí instalační balíček, který nelze spustit. Vytvoření konfigurace 64bitového projektu ve Visual Studiu 2005/2008 vypadá docela jednoduše. Potíže na vás budou číhat ve fázi sestavování nové konfigurace a hledání chyb v ní. Chcete-li vytvořit 64bitovou konfiguraci, stačí provést následující 4 kroky: Spusťte správce konfigurace, jak je znázorněno na obrázku N1:

Obrázek 1. Spuštění správce konfigurace Ve správci konfigurace vyberte podporu pro novou platformu (obrázek N2): Obrázek 2. Vytvoření nové konfigurace Vyberte 64bitovou platformu (x64) a vyberte nastavení z 32bitové verze jako základ (obrázek N3). Tato nastavení, která ovlivňují režim sestavení, se prostředí sady Visual Studio přizpůsobí samo.

Obrázek 3. Výběr x64 jako platformy a použití konfigurace Win32 jako základu Přidání nové konfigurace je nyní dokončeno a můžeme vybrat možnost 64bitové konfigurace a začít kompilovat 64bitovou aplikaci. Volba 64bitové konfigurace pro sestavení je znázorněna na obrázku N4. Obrázek 4. Nyní jsou k dispozici 32bitové a 64bitové konfigurace Pokud budete mít štěstí, nebudete muset 64bitový projekt dodatečně konfigurovat. Ale silně záleží na projektu, jeho složitosti a počtu použitých knihoven. Jediné, co se vyplatí hned změnit, je velikost zásobníku. Pokud váš projekt používá výchozí velikost zásobníku 1 megabajt, pak má smysl nastavit ji na 2 megabajty pro 64bitovou verzi. Není to nutné, ale je lepší se předem ujistit. Pokud používáte jinou než výchozí velikost zásobníku, pak má smysl ji pro 64bitovou verzi 2krát zvětšit. Chcete-li to provést, v nastavení projektu vyhledejte a změňte parametry Stack Reserve Size a Stack Commit Size. Zde by bylo dobré pohovořit o typických problémech, které vznikají ve fázi kompilace 64bitové konfigurace. Zvažte, jaké problémy vznikají s knihovnami třetích stran, řekněte, že kompilátor v kódu spojeném s funkcemi WInAPI již neumožní umístit ukazatel do typu LONG a budete muset svůj kód modernizovat a použít typ LONG_PTG. A mnoho mnoho dalších. Bohužel je toho tolik a chyby jsou tak rozmanité, že to není možné podat v rámci jednoho článku a třeba i knihy. Budete muset projít všechny chyby, které kompilátor vydá, a nová varování, která tam dříve nebyla, a v každém případě zjistit, jak modernizovat kód.

Sbírka odkazů na zdroje věnované vývoji 64bitových aplikací může částečně usnadnit život: http://www.viva64.com/links/64-bit-development/. Sborník je neustále aktualizován a autor bude čtenářům vděčný, pokud mu pošlou odkazy na zdroje, které si podle nich zaslouží pozornost.

Zaměříme se zde pouze na typy, které mohou vývojáře při migraci aplikací zajímat. Tyto typy jsou uvedeny v tabulce N3. Většina chyb při kompilaci bude způsobena použitím těchto typů.

Typ Rozměr typu na platformě x32 / x64 Poznámka
int 32 / 32 základní typ. Na 64bitových systémech zůstal 32bitový.
dlouho 32 / 32 základní typ. Na 64bitových systémech Windows zůstal 32bitový. Všimněte si, že na 64bitových systémech Linux byl tento typ rozšířen na 64bitové. Mějte to na paměti, pokud vyvíjíte kód, který je třeba zkompilovat pro systémy Windows i Linux.
velikost_t 32 / 64 Základní nepodepsaný typ. Velikost typu se volí tak, aby se do něj dala zapsat maximální velikost teoreticky možného pole. Ukazatel lze bezpečně umístit do typu size_t (výjimkou jsou ukazatele funkcí třídy, ale to je speciální případ).
ptrdiff_t 32 / 64 Podobné jako size_t, ale podepsané. Výsledek výrazu, kde je jeden ukazatel odečten od druhého (ptr1-ptr2), bude pouze typu ptrdiff_t.
Ukazatel 32 / 64 Velikost ukazatele přímo závisí na bitovosti platformy. Buďte opatrní při odesílání ukazatelů na jiné typy.
__int64 64 / 64 Podepsaný 64bitový typ.
DWORD 32 / 32 32bitový typ bez znaménka. Deklarováno ve WinDef.h jako: typedef unsigned long DWORD;
DWORDLONG 64 / 64 64bitový typ bez znaménka. Deklarováno ve WinNT.h jako: typedef ULONGLONG DWORDLONG;
DWORD_PTR 32 / 64 Typ bez znaménka, do kterého lze umístit ukazatel. Deklarováno v BaseTsd.h jako: typedef ULONG_PTR DWORD_PTR;
DWORD32 32 / 32 32bitový typ bez znaménka. Deklarováno v BaseTsd.h jako: typedef unsigned int DWORD32;
DWORD64 64 / 64 64bitový typ bez znaménka. Deklarováno v BaseTsd.h jako: typedef unsigned __int64 DWORD64;
HALF_PTR 16 / 32 Poloviční ukazatel. Deklarováno v Basetsd.h jako: #ifdef _WIN64 typedef int HALF_PTR;#else typedef short HALF_PTR;#endif
INT_PTR 32 / 64 Podepsaný typ, do kterého lze umístit ukazatel. Deklarováno v BaseTsd.h jako: #if define(_WIN64) typedef __int64 INT_PTR; #else typedef int INT_PTR;#endif
DLOUHO 32 / 32 Podepsaný typ, který zůstává 32bitový. Proto by se nyní měl v mnoha případech používat LONG_PTR. Deklarováno ve WinNT.h jako: typedef long LONG;
LONG_PTR 32 / 64 Podepsaný typ, do kterého lze umístit ukazatel. Deklarováno v BaseTsd.h jako: #if define(_WIN64) typedef __int64 LONG_PTR; #else typedef long LONG_PTR;#endif
LPARAM 32 / 64 Parametr pro odesílání zpráv. Deklarováno ve WinNT.h jako: typedef LONG_PTR LPARAM;
SIZE_T 32 / 64 Analog typu size_t. Deklarováno v BaseTsd.h jako: typedef ULONG_PTR SIZE_T;
SSIZE_T 32 / 64 Analog typu ptrdiff_t. Deklarováno v BaseTsd.h jako: typedef LONG_PTR SSIZE_T;
ULONG_PTR 32 / 64 Typ bez znaménka, do kterého lze umístit ukazatel. Deklarováno v BaseTsd.h jako:#if define(_WIN64) typedef unsigned __int64 ULONG_PTR;#else typedef unsigned long ULONG_PTR;#endif
SLOVO 16 / 16 16bitový typ bez znaménka. Deklarováno ve WinDef.h jako: typedef unsigned short WORD;
WPARAM 32 / 64 Parametr pro odesílání zpráv. Deklarováno ve WinDef.h jako: typedef UINT_PTR WPARAM;
Tabulka N3. Typy zájmu při portování 32bitových programů na 64bitové systémy Windows. Pokud si myslíte, že po opravě všech chyb při kompilaci získáte dlouho očekávanou 64bitovou aplikaci, pak budete muset zklamat. To nejtěžší je před námi. Ve fázi kompilace opravíte nejzjevnější chyby, které mohl kompilátor odhalit a které souvisejí především s nemožností implicitního přetypování. Ale tohle je špička ledovce. Většina chyb je skryta. Tyto chyby vypadají bezpečně z pohledu abstraktního jazyka C++ nebo jsou maskovány explicitními převody typů. Takových chyb je několikanásobně více, než je počet chyb zjištěných ve fázi kompilace.

Nespoléhejte na klíč /Wp64. Tento klíč je často nabízen jako skvělý nástroj pro hledání 64bitových chyb. Přepínač /Wp64 ve skutečnosti pouze umožňuje při kompilaci 32bitového kódu přijímat varování, že určité části kódu budou v 64bitovém režimu nesprávné. Při kompilaci 64bitového kódu tato varování kompilátor stejně vydá. Proto je při kompilaci 64bitové aplikace klíč /Wp64 ignorován. A ještě více tento klíč nepomůže při hledání skrytých chyb.

Podívejme se na některé příklady skrytých chyb. Nejjednodušší, ale v žádném případě nejsnáze zjistitelná třída chyb souvisí s explicitním přetypováním, které zkracuje významné bity. Běžným příkladem je přetypování ukazatelů na 32bitové typy při jejich předávání funkcím, jako je SendMessage:

MyObj* pObj = ... ::SendMessage(hwnd, msg, (WORD)x, (DWORD)pObj);
Zde se explicitní přetypování používá k převodu ukazatele na číselný typ. Pro 32bitovou architekturu je výše uvedený příklad správný, protože poslední parametr funkce SendMessage je typu LPARAM, což je stejné jako DWORD na 32bitové architektuře. Pro 64bitovou architekturu je použití DWORD chybné a mělo by být nahrazeno LPARAM. Typ LPARAM má velikost 32 nebo 64 bitů v závislosti na architektuře.

Toto je jednoduchý případ, ale často typové obsazení vypadá elegantněji a nelze jej detekovat pomocí varování kompilátoru nebo prohledáváním textu programu. Explicitní typová obsazení potlačují diagnostiku kompilátoru, protože jsou navržena tak, aby sdělila kompilátoru, že typové obsazení je správné a že programátor převzal odpovědnost za bezpečnost kódu. Nepomůže ani explicitní hledání. Typy nemusí být standardní názvy (určené programátorem prostřednictvím typedef) a existuje také mnoho způsobů, jak implementovat explicitní přetypování. Pro spolehlivou diagnostiku těchto chyb je nutné používat pouze speciální nástroje, jako jsou analyzátory Viva64 nebo PC-Lint.

Další příklad již souvisí s implicitním převodem typu, který také způsobuje ztrátu významných bitů. Kód funkce fread čte ze souboru, ale při pokusu o načtení více než 2 gigabajtů dat na 64bitovém systému je nesprávný.

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, velikost, počet, fp); FUNLOCKFILE(fp); return (ret) ;)
Funkce __fread vrací typ size_t, ale k uložení počtu přečtených bajtů se používá typ int. Výsledkem je, že při velkém množství čtených dat může funkce vrátit jiný počet bajtů, než bude skutečně načten. Můžete říci, že se jedná o negramotný kód pro začátečníky, že překladač ohlásí takové přetypování typu a že obecně lze takový kód snadno najít a opravit. To je teoretické. Ale prakticky v reálném životě u velkých projektů může být všechno jinak. Tento příklad je převzat ze zdrojového kódu FreeBSD. Chyba byla opravena až v prosinci 2008! A to navzdory skutečnosti, že první (experimentální) 64bitová verze FreeBSD byla vydána již v červnu 2003. Zde je zdrojový kód před opravou:

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

A zde je opravená verze (prosinec 2008) roku:

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

Je snadné udělat chybu v kódu, který pracuje s jednotlivými bity. Další typ chyby je spojen s operacemi směny. Zvažte příklad:

ptrdiff_t SetBitN(hodnota ptrdiff_t, bitNum bez znaménka) ( maska ​​ptrdiff_t = 1
Výše uvedený kód funguje na 32bitové architektuře a umožňuje nastavit bity s čísly od 0 do 31 až jedna. Po portování programu na 64bitovou platformu bude nutné nastavit bity od 0 do 63. Tento kód ale nikdy nenastaví bity s čísly 32-63. Všimněte si, že "1" je typu int a posun o 32 pozic přeteče, jak je znázorněno na obrázku 5. Zda skončíme s 0 (obrázek 5-B) nebo 1 (obrázek 5-C), závisí na implementaci kompilátoru.

Obrázek 5. A - Správné nastavení 31. bitu ve 32bitovém kódu; B,C - Chyba při nastavení 32. bitu na 64bitovém systému (dvě chování) Chcete-li opravit kód, musíte vytvořit konstantu "1" stejného typu jako proměnná mask:

ptrdiff_tmask = ptrdiff_t(1)
Všimněte si také, že neopravený kód povede k další zajímavé chybě. Při nastavení 31 bitů na 64bitovém systému bude výsledkem funkce hodnota 0xffffffff80000000 (viz obrázek 6). Výsledek výrazu 1 size_t Velikost pole = N * 4; size_t *Array = (size_t *)malloc(ArraySize); Hlavní čísla, se kterými je třeba při přechodu na 64bitovou platformu zacházet opatrně, jsou uvedeny v tabulce N4.

Tabulka N4. Hlavní magické hodnoty nebezpečné při portování aplikací z 32bitových na 64bitové platformy Programy, které zpracovávají velké množství dat, mohou narazit na chyby související s indexováním velkých polí nebo věčnými smyčkami. Následující příklad obsahuje 2 chyby najednou:

const size_t size = ...; char *pole = ...; char *konec = pole + velikost; for (unsigned i = 0; i != size; ++i) ( const int one = 1; end[-i - one] = 0; )
První chybou je, že pokud velikost zpracovávaných dat přesáhne 4 gigabajty (0xFFFFFFFF), může dojít k věčné smyčce, protože proměnná "i" je typu "unsigned" a nikdy nedosáhne hodnoty 0xFFFFFFFF. Konkrétně píšu, že vznik je možný, ale nemusí k němu nutně dojít. Záleží na tom, jaký kód kompilátor sestaví. Například v režimu ladění bude přítomna věčná smyčka a v kódu uvolnění smyčka zmizí, takže se kompilátor rozhodne optimalizovat kód pomocí 64bitového registru pro čítač a smyčka bude správná. To vše přispívá ke zmatku a kód, který fungoval včera, může druhý den náhle přestat fungovat. Druhá chyba souvisí s průchodem polem od konce k začátku, pro který se používají záporné hodnoty indexu. Výše uvedený kód je funkční v 32bitovém režimu, ale když je spuštěn na 64bitovém stroji, při úplně první iteraci smyčky se přistoupí k poli a program se zhroutí. Podívejme se na důvod tohoto chování. Podle pravidla jazyka C++ na 32bitovém systému bude výraz "-i - one" vyhodnocen následovně (v prvním kroku i = 0):
  1. Výraz "-i" je typu bez znaménka a má hodnotu 0x00000000u.
  2. Proměnná "one" bude rozšířena z typu "int" na typ unsigned a bude se rovnat 0x00000001u. Poznámka: Typ int je rozšířen (podle standardu jazyka C++) na typ "unsigned", pokud se účastní operace, kde je druhý argument typu unsigned.
  3. Proběhne operace odečítání, která zahrnuje dvě hodnoty typu unsigned a výsledek operace je 0x00000000u - 0x00000001u = 0xFFFFFFFFu. Všimněte si, že výsledek je typu bez znaménka.
  4. Na 32bitovém systému je přístup k poli na indexu 0xFFFFFFFFu ekvivalentní použití indexu -1. To znamená, že end je analogický s end[-1]. V důsledku toho je prvek pole zpracován správně.
V 64bitovém systému bude obrázek v posledním odstavci jiný. Typ unsigned bude rozšířen na podepsaný ptrdiff_t a index pole bude 0x00000000FFFFFFFFi64. V důsledku toho bude pole mimo rozsah. Pro opravu kódu musíte použít typy jako ptrdiff_t a size_t. Jsou chyby, za které obecně nikdo nenese vinu, ale to jim nebrání být chybami. Představte si, že kdysi dávno v galaxii daleko (ve Visual Studiu 6.0) byl vyvinut projekt, ve kterém je přítomna třída CSampleApp, která je potomkem CWinApp. Základní třída má virtuální funkci WinHelp. Nástupce přepíše tuto funkci a provede potřebné akce. Vizuálně je to znázorněno na obrázku 7.

Obrázek 7. Funkční správný kód, který byl vytvořen ve Visual Studiu 6.0 Poté je projekt přenesen do Visual Studia 2005, kde se prototyp funkce WinHelp změnil, ale nikdo si toho nevšimne, protože v 32bitovém režimu jsou typy DWORD a DWORD_PTR jsou stejné a program nadále funguje správně (obrázek 8).

Obrázek 8. Nesprávný, ale funkční 32bitový kód Chyba čeká na to, aby se projevila v 64bitovém systému, kde jsou různé velikosti typů DWORD a DWORD_PTR (obrázek 9). Ukazuje se, že v 64bitovém režimu třídy obsahují dvě ODLIŠNÉ funkce WinHelp, což je přirozeně nesprávné. Mějte na paměti, že takové pasti se mohou skrývat nejen v MFC, kde některé funkce změnily typy svých argumentů, ale také v kódu vašich aplikací a knihoven třetích stran.

Obrázek 9. Chyba se projevuje v 64bitovém kódu Je možné uvést a uvést příklady takových 64bitových chyb. Koho takové chyby zajímají a chtějí se o nich dozvědět více, bude zajímat článek "20 úskalí portování C++ kódu na 64bitovou platformu" . Jak vidíte, fáze hledání skrytých chyb je netriviální úkol, zejména proto, že se řada z nich bude objevovat nepravidelně nebo pouze na velkých objemech vstupních dat. Statické analyzátory kódu jsou vhodné pro diagnostiku takových chyb, protože dokážou zkontrolovat celý aplikační kód bez ohledu na vstupní data a frekvenci provádění jeho částí v reálných podmínkách. Má smysl používat statickou analýzu jak ve fázi portování aplikace na 64bitové platformy za účelem nalezení většiny chyb v úplné počáteční fázi, tak při dalším vývoji 64bitových řešení. Statická analýza upozorní a naučí programátora lépe porozumět vlastnostem chyb spojených s 64bitovou architekturou a psát efektivnější kód. Autor článku je vývojář jednoho z těchto specializovaných analyzátorů kódu s názvem Viva64. S nástrojem se můžete podrobněji seznámit a stáhnout si demoverzi ze stránek společnosti LLC „Program Verification Systems“. Abychom byli spravedliví, takové analyzátory kódu jako Gimpel PC-Lint a Parasoft C++Test mají sadu pravidel pro diagnostiku 64bitových chyb. Ale za prvé jsou to analyzátory pro všeobecné použití a pravidla pro diagnostiku 64bitových chyb jsou v nich špatně zastoupena. Za druhé, jsou více zaměřeny na datový model LP64 používaný v operačních systémech rodiny Linux, což snižuje jejich užitečnost pro programy Windows, které používají datový model LLP64. Krok hledání chyb v kódu programu popsaný v předchozí části je nezbytným, ale ne dostatečným krokem. Žádná metoda, včetně statické analýzy kódu, nemůže plně zaručit detekci všech chyb a nejlepšího výsledku lze dosáhnout pouze kombinací různých metod.

Pokud váš 64bitový program zpracovává více dat než 32bitová verze, musíte testy rozšířit o zpracování dat větších než 4 gigabajty. To je hranice, za kterou se začíná projevovat mnoho 64bitových chyb. Takové testy mohou zabrat řádově více času a je třeba se na to předem připravit. Testy jsou obvykle psány tak, aby zpracovaly malý počet prvků v každém testu a byly tak například schopny projít všemi interními jednotkovými testy? za několik minut a automatizované testy (například pomocí AutomatedQA TestComplete) za několik hodin. Funkce řazení na 32bitovém systému, pokud seřadí 100 prvků, se bude chovat správně na 100 000 prvcích s téměř plnou zárukou. Ale stejná funkce na 64bitovém systému může selhat při pokusu o zpracování 5 miliard prvků. Rychlost provádění testu jednotky lze snížit milionkrát. Při zvládnutí 64bitových systémů nezapomeňte započítat náklady na adaptaci testu. Jedním z řešení je oddělení jednotkových testů na rychlé (pracující s malým množstvím paměti) a pomalé, zpracovávající gigabajty a běžící například v noci. Automatizované testování 64bitových programů náročných na zdroje lze postavit na základě distribuovaného počítání.