Dependendo de como o sistema operacional específico funciona, geralmente você espera que a memória seja alocada sem otimização, de modo que, quando você pede um byte, uma palavra ou outro tipo de dado pequeno a ser alocado, o valor ocupa um registro inteiro. próprio. Como seu compilador ou intérprete trabalha para interpretar isso, no entanto, é outra coisa; portanto, se você compilar um programa em C #, por exemplo, o valor poderá ocupar fisicamente um registro para si mesmo; no entanto, o valor será verificado nos limites para garantir que você não tente armazenar um valor que excederá os limites do tipo de dados pretendido.
Em termos de desempenho, e se você é realmente pedante sobre essas coisas, provavelmente é mais rápido simplesmente usar o tipo de dados que mais se aproxima do tamanho do registro de destino, mas você perde todo esse adorável açúcar sintático que facilita o trabalho com variáveis .
Como isso te ajuda? Bem, depende de você decidir que tipo de situação você está codificando. Para quase todos os programas que já escrevi, basta confiar no seu compilador para otimizar as coisas e usar o tipo de dados que é mais útil para você. Se você precisar de alta precisão, use os tipos de dados maiores de ponto flutuante. Se estiver trabalhando apenas com valores positivos, provavelmente você poderá usar um número inteiro não assinado, mas, na maioria das vezes, basta usar o tipo de dados int.
Se, no entanto, você tiver alguns requisitos de dados muito rígidos, como escrever um protocolo de comunicação ou algum tipo de algoritmo de criptografia, o uso de tipos de dados com intervalo verificado pode ser muito útil, principalmente se você estiver tentando evitar problemas relacionados a excedentes / subunidos de dados ou valores de dados inválidos.
A única outra razão pela qual posso pensar em detalhes para usar tipos de dados específicos é quando você está tentando comunicar a intenção dentro do seu código. Se você usar uma abreviação, por exemplo, estará dizendo a outros desenvolvedores que está permitindo números positivos e negativos dentro de um intervalo de valores muito pequeno.