Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it L'avatar di LuckySevenRoX
    Registrato dal
    Sep 2011
    residenza
    Foligno
    Messaggi
    361

    Processori a 64bit: differenze effettive dai 32 bit

    salve, premetto che non mi intendo molto di architetture e in generale dei componenti hardware, ma vorrei cercare di ampliare le mie conoscenze..

    Vorrei capire dove sta il vantaggio effettivo di un sistema che sfrutta dati da 64 bit.. ecco cosa ho trovato in rete:

    "Un computer a 64 bit supporta l'elaborazione di una quantità di informazioni doppia rispetto a un computer a 32 bit e può disporre di una quantità di memoria ad accesso casuale (RAM) notevolmente maggiore. "

    I 64bit a cosa si riferiscono? alla dimensione degli spazi in memoria giusto? parliamo di ram o di altra memoria?

    però mi chiedo, se i tipi di dato più comuni come gli interi continuano ad usare uno spazio di 32 bit anche nei sistemi a 64bit, il vantaggio dov'è? anzi, non succede che in questo modo allocando uno spazio per 32bit in uno da 64 si sprecano 32bit?

    sicuramente ho fatto un gran casino ma ripeto, non ci capisco poco e spero possiate darmi un "input" iniziale (anche dei buoni link o libri) per capire meglio la situazione!

  2. #2
    In linea teorica, un passaggio da un processore a 32 bit a uno a 64 bit indica semplicemente:
    - che le dimensioni degli interi nativi passano da 32 a 64 bit, il che significa che è possibile lavorare su interi più grandi in maniera più rapida;
    - che le dimensioni dei puntatori passano da 32 a 64 bit, il che significa che è possibile indirizzare più memoria.

    In pratica la questione è più complicata: i processori x86 a 32 bit già di loro supportano l'indirizzamento di più memoria fisica rispetto ai canonici 4 GB - il PAE, che esiste dai tempi del Pentium II, se non erro, consente uno spazio di indirizzamenti fisico a 36 bit, ovvero 64 GB.
    Tuttavia spesso questa funzionalità non viene sfruttata per tutta una serie di motivi (è più una pezza che una soluzione), ma soprattutto, nonostante l'indirizzamento fisico possa essere a 36 bit, gli spazi di indirizzi virtuali dei processi restano a 32 bit (di cui in genere metà sono riservati per il kernel).
    Per questo motivo in genere ogni applicazione su una macchina x86 a 32 bit può tenere nello spazio di indirizzi virtuale un massimo di 2 GB di roba contemporaneamente (e se c'è frammentazione nello spazio di indirizzi la situazione peggiora).
    Passare a 64 bit "per davvero" consente di rimuovere questi problemi sia per quanto riguarda l'indirizzamento fisico (=>quanta memoria fisica il processore può referenziare) che per quanto riguarda quello virtuale (=>quanta roba le singole applicazioni/il kernel possono tenere nello spazio di indirizzi contemporaneamente).

    A tutto questo bisogna aggiungere il fatto che il passaggio da x86 a x86_64 fornisce una serie di vantaggi aggiuntivi:
    - i registri già esistenti vengono espansi - credo si possano sfruttare per tenere in un registro contemporaneamente due interi a 32 bit, che praticamente ogni compilatore continua a tenere come interi di default;
    - ma soprattutto, vengono aggiunti dei nuovi registri general-purpose, il che, su un'architettura povera di registri come quella x86, è piuttosto rilevante, e in diversi casi può dare vantaggi prestazionali sensibili;
    - inoltre, le specifiche per x86_64 "danno per scontata" l'esistenza di diversi set di istruzioni aggiuntive (MMX, SSE, ...), per cui il programmatore non si deve preoccupare di attivarli e rischiare di perdere compatibilità con processori più vecchi: se si compila per x86_64 questi ci sono sicuramente, e il compilatore li può sfruttare senza porsi problemi.
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.