A seconda di come funziona il sistema operativo specifico, generalmente ci si aspetta che la memoria venga allocata in modo non ottimizzato in modo tale che quando si chiama un byte o una parola o qualche altro tipo di dati piccoli da allocare, il valore occupa un intero registro tutto di esso è molto personale. Il modo in cui il compilatore o l'interprete lavora per interpretarlo è un'altra cosa, quindi se dovessi compilare un programma in C #, ad esempio, il valore potrebbe occupare fisicamente un registro per se stesso, tuttavia il valore verrà controllato per garantire che non lo faccia prova a memorizzare un valore che superi i limiti del tipo di dati desiderato.
Per quanto riguarda le prestazioni, e se sei veramente pignolo su queste cose, è probabile che sia più veloce usare semplicemente il tipo di dati che più si avvicina alle dimensioni del registro di destinazione, ma poi ti perdi tutto quel delizioso zucchero sintattico che fa lavorare con variabili così facili.
In che modo ti aiuta? Bene, dipende da te decidere quale tipo di situazione stai codificando. Per quasi tutti i programmi che ho scritto, basta affidarsi al compilatore per ottimizzare le cose e utilizzare il tipo di dati che è più utile per te. Se hai bisogno di alta precisione, usa i tipi di dati a virgola mobile più grandi. Se lavori con solo valori positivi, puoi probabilmente usare un numero intero senza segno, ma per la maggior parte, è sufficiente usare semplicemente il tipo di dati int.
Se tuttavia si hanno requisiti di dati molto rigidi, come la scrittura di un protocollo di comunicazione o un qualche tipo di algoritmo di crittografia, usare i datatypes controllati dal range può essere molto utile, specialmente se si tenta di evitare problemi relativi ai dati overruns / underruns o valori di dati non validi.
L'unica altra ragione per cui riesco a pensare in modo ineccepibile all'uso di tipi di dati specifici è quando stai cercando di comunicare l'intento all'interno del tuo codice. Ad esempio, se utilizzi un cortocircuito, stai dicendo ad altri sviluppatori che stai consentendo numeri positivi e negativi all'interno di un intervallo di valori molto piccolo.