Variável int16 tem desempenho superior a INT64 ? O tipo de dado importa?

1. Variável int16 tem desempenho superior a INT64 ? O tipo de dado importa?

Luis Felipe Rodrigues
luisfeliperm

(usa Debian)

Enviado em 25/06/2019 - 04:08h

O tipo de de variável influencia no desempenho da aplicação? Por exemplo, se eu desejo atribuir o valor "4", eu sei esse numero utiliza 2 bits. Então faria diferença na aplicação se eu colocasse essa variável como: int16 int32 int64?

Em um banco de dados por exemplo?

Tenho essa dúvida porque atualmente eu estou refazendo uma aplicação em e vejo que os dados do tipo inteiro são sempre int32 ou int64 sendo que o numero não passa de 100.

Se eu mudar para int16 terei um desempenho melhor?


  


2. Re: Variável int16 tem desempenho superior a INT64 ? O tipo de dado importa?

Paulo
paulo1205

(usa Ubuntu)

Enviado em 25/06/2019 - 16:26h

luisfeliperm escreveu:

O tipo de de variável influencia no desempenho da aplicação?


Sim.

Por exemplo, se eu desejo atribuir o valor "4", eu sei esse numero utiliza 2 bits.

Na verdade, 4 já requer o terceiro bit (1 bit representa 0 ou 1, 2 bits permitem contar até 3, 3 bits permitem contar até 7; o valor máximo, em inteiros sem sinal, para um número de n bits é 2^n-1).

Então faria diferença na aplicação se eu colocasse essa variável como: int16 int32 int64?


Faz diferença em termos de memória ocupada, especialmente se você pensar em arrays e estruturas, e pode fazer diferença também em termos de desempenho para realizar determinadas operações. Quanto e de que formas, vai depender da arquitetura, do modo de operação, do alinhamento do dado na memória, do tipo de operação (por exemplo: adição e subtração tende a ter menos variação de acordo com a largura do dado do que multiplicações e, principalmente, divisões)., do aproveitamento de cache, entre outros fatores.

Em um banco de dados por exemplo?


A preocupação com banco de dados geralmente é mais em termos de volume de dados e contenção de desempenho de leitura e escrita, que também tem a ver com volume, do que com desempenho de operações aritméticas.

Tenho essa dúvida porque atualmente eu estou refazendo uma aplicação em e vejo que os dados do tipo inteiro são sempre int32 ou int64 sendo que o numero não passa de 100.

Se eu mudar para int16 terei um desempenho melhor?


Depende da operação que você efetuar com tais dados. Pode nos dar uma ideia?


Pesquisando em função deste tópico, eu achei um artigo no StackOverflow (https://stackoverflow.com/questions/5069489/performance-of-built-in-types-char-vs-short-vs-int-vs-fl...) e, dentro dele, um link para um site (https://www.agner.org/optimize/) que me pareceram bem interessantes.


... “Principium sapientiae timor Domini, et scientia sanctorum prudentia.” (Proverbia 9:10)


3. Cenário

Luis Felipe Rodrigues
luisfeliperm

(usa Debian)

Enviado em 28/06/2019 - 15:19h

Primeiramente, obrigado pela sua resposta!



A preocupação com banco de dados geralmente é mais em termos de volume de dados e contenção de desempenho de leitura e escrita, que também tem a ver com volume, do que com desempenho de operações aritméticas.

Tenho essa dúvida porque atualmente eu estou refazendo uma aplicação em e vejo que os dados do tipo inteiro são sempre int32 ou int64 sendo que o numero não passa de 100.

Se eu mudar para int16 terei um desempenho melhor?


Depende da operação que você efetuar com tais dados. Pode nos dar uma ideia?

... “Principium sapientiae timor Domini, et scientia sanctorum prudentia.” (Proverbia 9:10)


Os valores armazenados são informações do perfil do usuário, id's de registros, kills, deaths, partidas... Alguns desses valores eu sei que não passará de 1000. Esses dados são usados pelo servidor, que envia os mesmos para o client pela rede.
Quanto ao banco de dados. Assim que o servidor é iniciado, ele carrega os dados da database e armazena em variavies, quando necessário, faz alguma alteração na db.

Em relação as ID's de registros. Eu sei que esse projeto não chegará a ter mais de 20.000 contas de usuários, atualmente estamos em 4.000. Então eu devo utilizar SMALLINT (int16) no lugar de BIGINT?


4. Re: Variável int16 tem desempenho superior a INT64 ? O tipo de dado importa?

Paulo
paulo1205

(usa Ubuntu)

Enviado em 28/06/2019 - 17:45h

Eu não tenho como prever o uso que vocês poderão alcançar, mas experiências passadas, tanto próprias e próximas quanto algumas famosas mundo a fora, mostram que pensar que o pequeno vai atender para sempre pode se mostrar falso em menos tempo que se imagina. Haja visto os 640kB do PC original ou a forma de representar datas que levou a vários bugs de Y2K.

No caso específico do banco de dados, se você não espera que o banco de dados cresça muito, qual o problema de usar quatro (ou mesmo oito) bytes em lugar de dois para os campos numéricos?


... “Principium sapientiae timor Domini, et scientia sanctorum prudentia.” (Proverbia 9:10)






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts