2010-01-02 9 views
10

Forse mi manca un punto importante della piattaforma x64 qui, ma la mia percezione era che le applicazioni x64 erano solo migliori delle versioni x86 (su un sistema x64 e hardware, ovviamente) quando grandi quantità di memoria, puntatori di grandi dimensioni o altri fattori impegnativi sono stati coinvolti.Devo fornire una build x64 della mia applicazione?

Tuttavia, ho iniziato a notare alcune applicazioni più piccole che offrono versioni x64 dei loro programmi di installazione oltre alle versioni x86 standard. Poiché x86 funziona bene su Windows x64 usando WoW, c'è qualche vantaggio nel rilasciare una versione compilata x64 della mia applicazione? Come la vedo io:

Pro:

  • Potenzialmente prestazioni più elevate (in quali condizioni, però)

Contro:

  • accumulo supplementare per creare/supporto
  • Potenziali bug in target x64 che non sono presenti nella destinazione x86
  • La dipendenza da versioni x64 di DLL vendor/OS, che richiede diverse installare lista di controllo e l'introduzione di complicazioni di risoluzione dei problemi

Quali sono alcuni motivi validi che dovrebbe causare me per riconsiderare l'aggiunta di una versione x 64 compilata di mia app?

risposta

4

Un altro motivo potenziale per la compilazione e il debug di una versione x64 è che potrebbe esporre bug nascosti nella versione x86. Ad esempio, questo potrebbe esporre conversioni impropri tra interi a 32 bit e puntatori a 64 bit (ora). Questo ti posiziona anche per supportare x64 in futuro.

Tuttavia, a meno che l'applicazione non tragga vantaggio da interi a 64 bit, registri di cpu aggiuntivi, spazio di memoria più grande (oltre 3,5 Gb) o implementazione di un driver di dispositivo, l'applicazione a 32 bit funzioni correttamente. Tutti i principali sistemi operativi supportano contemporaneamente applicazioni x32 e x64, quindi non ci sarà una spinta importante verso le sole applicazioni a 64 bit.

BTW. Le applicazioni basate su .NET beneficiano automaticamente dell'esecuzione su un sistema a 64 bit senza modifiche al codice. No test aggiuntivo richiesto.

+0

Hmm - Non avevo considerato che i bug aggiuntivi rilevati come * beneficio *, ma suppongo che in un certo senso, sia - sono non sono stati creati bug, ma solo bug scoperti. Forse lo offrirò per questa ragione, ma non sembra che ci sia un lato negativo nell'offrire uno, anche se potrebbe non essere molto al rialzo per la mia piccola applicazione. – SqlRyan

+3

Si noti che il "vantaggio automatico" delle applicazioni .NET entra in gioco solo se si compila per AnyCPU (es. MSIL), e solo se non si utilizza Interop. Se si sta sviluppando su un 32 bit, compilando per AnyCPU e utilizzando l'interoperabilità a 32 bit, tutto funziona peachy finché non viene eseguito su un 64 bit, quindi "nessun test aggiuntivo richiesto" dipende realmente dall'applicazione in questione. –

+0

Ma se sto usando solo il codice .NET gestito, lo sviluppo su una workstation x64 e la compilazione su AnyCPU, allora c'è bisogno di una transizione? La versione che sto compilando mira già a qualunque framework sia utile, quindi non dovrebbe fare alcuna differenza. Riconosco che è più complicato in situazioni non gestite o target-compilate. – SqlRyan

1

Il vostro programma andrà a beneficio se si utilizza un sacco di long long s e WOW naturalmente significa un calo di prestazioni minore (molto minore, però, perché la CPU ha una modalità di compatibilità per tale motivo questo) ...

di Windows il supporto per i programmi a 32 bit sarà degradante in futuro (anche se lentamente) quindi dico in un altro anno o 2, puoi solo chiedermi perché vorrai implementare un'applicazione a 32 bit ...

Inoltre, un 64 bit build della tua applicazione, in realtà può essere molto più ottimizzato di un build a 32 bit perché con 64 bit, hai sicuramente un sacco di cose, come SSE2.

+0

Dubito delle vostre previsioni per i prossimi due anni. Per le nuove applicazioni può essere logico considerare il 64-bit compatibile ma (a) l'implementazione di * solo * le versioni a 64 bit è un'idea stupida considerando l'enorme numero di macchine legacy esistenti e (b) l'adattamento di applicazioni esistenti è una quantità enorme di lavoro con quasi nessun vantaggio immediato per la maggior parte di loro. Cerca di vedere 64-bit principalmente in scenari server e scientifici, proprio come lo è oggi. – Joey

+3

devi considerare che abbiamo avuto a casa computer a 64 bit dal 2004 (o anche prima) ... la cosa che non capisco è perché i rivenditori continuano a installare sistemi operativi a 32 bit su nuovi computer a 64 bit. – Earlz

+1

Per un mentre (sul lato Windows almeno, di recente come Vista), sembrava che i driver fossero il grande hold-up, ma ora (in tempo con Windows 7), sembra esserci un'ondata di fornitore e supporto driver, quindi penso che il passaggio a x64 sia avvincente. Non sto chiedendo di fermare il supporto per x86, ma sono solo curioso di sapere cosa aggiungere il supporto per x64 prima che sia effettivamente necessario acquistare me oi miei clienti – SqlRyan

3

Il potenziale miglioramento delle prestazioni si riferisce principalmente all'utilizzo di numeri interi a 64 bit (circa 4 volte più veloci in un build x64 sulla mia macchina rispetto a x86 sullo stesso) e al fatto che i compilatori possono assumere alcune funzioni della CPU per essere universalmente presenti nelle CPU che supportano x64, come SSE2, & c .; questo può portare a un codice più ottimizzato.

Per molte applicazioni, soprattutto quelle piccole, non è troppo difficile essere pulito a 64 bit, per quelli più grandi è un grosso mal di testa, garantito. Ragioni convincenti sono poche, di solito. Ma alcune piattaforme non installano il loro supporto a 32 bit nelle versioni a 64 bit per impostazione predefinita (penso che a FreeBSD sia stato detto esplicitamente di farlo, ma potrei sbagliarmi).

+2

AMD64 (x86-64) ha il doppio della quantità di interi e registri SSE di x86. Sebbene le CPU siano in realtà piuttosto buone nell'usare più registri fisici rispetto a quanto specificato nel codice, ciò porta alla maggior parte della velocità, non a 64 bit interi. –

+0

Buon punto. Tuttavia, non è da trascurare neanche una velocità di 4 volte quando si usa 'long'. – Joey

+0

'long' è ancora a 32 bit (per qualsiasi motivo stupido) nelle versioni x86-64 di windows – Earlz

1

Prestazioni; x86_64 è più veloce di x86 di una piccola quantità (che dipende anche dal compilatore), per i motivi già indicati. Inoltre, è più facile supportare serie di dati davvero enormi, ma ovviamente molte applicazioni non hanno mai bisogno di andare lì.

Certamente su Linux e OS X, dovresti davvero supportare x86_64; Sto scrivendo questo su un browser a 64 bit su OS X, e il mio box Linux nell'angolo è anche a 64 bit quasi esclusivamente. Windows a 64 bit è un po 'più di una domanda, ma ora sta arrivando (con i driver).

1

Questo è spesso basato su fattori umani piuttosto che su un ragionamento tecnico oggettivo. 64-bit è l'ultimo e il più grande e deve essere migliore di 32-bit. Se i clienti lo vogliono, il cliente ha sempre ragione. Ho parlato con gli utenti di Windows dicendo che il loro obiettivo era quello di rendere tale che quando visualizzano la loro lista dei processi in windows * 32 non appaia accanto a nessuna delle loro app.

Spesso questo è anche alimentato dalla confusione sul punto di compatibilità in cui le persone hanno sistemi operativi a 64 bit e vogliono solo assicurarsi che il software funzioni sui loro computer. Prevedere che le persone comuni capiscano la linea di demarcazione tecnica tra i processi a 32 bit su un sistema operativo a 64 bit non è realistico. A meno che non sia esplicitamente indicato sulla confezione, può essere un punto di confusione/preoccupazione per un cliente che acquista un nuovo software. Spesso si vedrà 64 bit menzionati per questo motivo. In genere questo significa solo la compatibilità a 64 bit.

Ora ci sono alcune applicazioni a 64 bit (flash player e google earth top la mia lista) che non possono venire abbastanza presto.

1

Ecco uno dei motivi: l'integrazione con le app a 64 bit, come scrivere un'estensione della shell. Un processo a 64 bit non è in grado di caricare direttamente una DLL a 32 bit, quindi è necessario rendere anche il proprio 64 bit.

0

Un fattore che non è stato ancora menzionato: WoW64 Is Now an Optional Feature for Server Core. Solo un problema se l'applicazione deve essere eseguita su sistemi server, ovviamente.

Analogamente, Windows PE, Windows RE, ecc., Non includono Wow64.

Problemi correlati