Question

Je me demandais cela depuis longtemps que je ne l'ai jamais eu l'éducation « formelle » sur la science informatique (je suis en classe de seconde), alors s'il vous plaît excuser mon ignorance sur le sujet.

Sur une plate-forme qui prend en charge les trois types d'entiers figurant dans le titre, que l'on est mieux et pourquoi? (Je sais que tous les types d'int a une longueur différente dans la mémoire, mais je ne sais pas ce que cela signifie ou comment elle influe sur la performance ou de la vue d'un développeur point, que l'on a plus d'avantages sur l'autre).

Merci d'avance pour votre aide.

Était-ce utile?

La solution

« Mieux » est un terme subjectif, mais certains entiers sont plus performants sur certaines plates-formes.

Par exemple, dans un ordinateur 32 bits (référencé par des termes comme plate-forme 32 bits et Win32) la CPU est optimisée pour gérer une valeur de 32 bits à la fois, et le 32 fait référence au nombre de bits que les CPU peut consommer ou produire en un seul cycle. (Ceci est une explication très simpliste, mais il a l'idée générale à travers).

Dans un ordinateur 64 bits (les plus récents processeurs AMD et Intel entrent dans cette catégorie), la CPU est optimisée pour gérer les valeurs 64 bits à la fois.

Ainsi, sur une plate-forme 32 bits, un entier de 16 bits chargé dans une adresse de 32 bits aurait besoin d'avoir 16 bits mis à zéro pour que la CPU puisse fonctionner sur elle; un nombre entier de 32 bits serait immédiatement utilisable, sans modification, et un nombre entier de 64 bits devrait être opéré en deux ou plusieurs cycles d'unité centrale de traitement (une fois pour les faibles 32 bits, puis à nouveau pour les hautes 32 bits) .

A l'inverse, sur une plate-forme 64 bits, les nombres entiers de 16 bits devrait avoir 48 bits mis à zéro, les nombres entiers de 32 bits auraient besoin d'avoir 32 bits mis à zéro et les entiers de 64 bits peuvent être actionnés immédiatement.

Chaque plate-forme et CPU a un peu-ness « native » (comme 32 ou 64), ce qui limite généralement quelques-unes des autres ressources accessibles par cette unité centrale de traitement (par exemple, la limitation de 3 Go de mémoire / 4 Go de 32 processeurs -bit). La famille de processeur 80386 (et x86 plus tard) processeurs 32 bits fait la norme, mais maintenant des entreprises comme AMD et Intel font actuellement 64 bits la norme.

Autres conseils

Pour répondre à votre première question, l'utilisation d'un 16 bits vs un 32 bits vs 64 bits un nombre entier dépend du contexte qu'il est utilisé. Par conséquent, vous ne pouvez vraiment pas dire que l'un est meilleur sur l'autre, par exemple. Toutefois, selon une situation, en utilisant un sur l'autre est préférable. Considérons cet exemple. Disons que vous avez une base de données avec 10 millions d'utilisateurs et que vous voulez stocker l'année où ils sont nés. Si vous créez un champ dans votre base de données avec un entier de 64 bits alors que vous avez épuisé 80 méga-octets de votre stockage; alors, si vous deviez utiliser un champ de 16 bits, seulement 20 méga-octets de votre stockage vous habituerez. Vous pouvez utiliser un champ ici 16 bits parce que les gens sont nés l'année est plus petit que le plus grand nombre de 16 bits. En d'autres termes 1980, 1990, 1991 <65535, en supposant que votre champ est non signé. Dans l'ensemble, cela dépend du contexte. J'espère que cela aide.

Une réponse simple est d'utiliser le plus petit que vous SAVEZ sera sans danger pour la plage de valeurs possibles, il contiendra.

Si vous connaissez les valeurs possibles sont contraintes à être inférieure à une longueur maximale de 16 bits entier (par exemple, la valeur correspondant à ce jour de l'année il est - toujours <= 366), utilisez alors que. Si vous n'êtes pas sûr (par exemple l'ID d'enregistrement d'une table dans une base de données qui peut avoir un certain nombre de lignes) puis utilisez Int32 ou Int64 en fonction de votre jugement.

Autre peut probablement vous donner une meilleure idée de des avantages de performance en fonction de ce langage de programmation que vous utilisez, mais les types plus petits utilisent moins de mémoire et sont donc « mieux » à utiliser si vous n'avez pas besoin plus.

Juste à titre de référence, un nombre entier de 16 bits signifie qu'il y a 2 ^ 16 valeurs possibles - généralement représentés comme entre 0 et 65535. Les valeurs 32 bits vont jusqu'à 2 ^ 32 ou un peu plus de 4,29 milliards de valeurs.

Cette question Sur les CPU 32 bits, est plus efficace un type « entier » qu'un type « court »? peut ajouter un peu plus de bonnes informations.

Il dépend de la vitesse doivent être optimisés ou le stockage. Si vous êtes intéressé par la vitesse et que vous exécutez SQL Server en mode 64 bits puis 64 touches de bits sont ce dont vous avez besoin. Un processeur 64 bits fonctionnant en mode 64 bits, est optimisée pour utiliser des adresses de 64 bits et le nombre. De même, un fonctionnement du processeur de 64 bits en mode 32 bits est optimisée pour utiliser 32 nombres de bits et des adresses. Par exemple, en mode 64 bits, tous les pousse et pops sur la pile sont 8 octets, etc. récupèreront également à partir du cache et de la mémoire sont à nouveau optimisés pour 64 numéros et adresses bits. Le processeur, en cours d'exécution en mode 64 bits, peut avoir besoin de cycles machine pour gérer un nombre de 32 bits comme un processeur, en cours d'exécution en mode 32 bits a besoin de plus de cycles de la machine pour gérer un nombre de 16 bits. L'augmentation des temps de traitement sont pour beaucoup de raisons, mais il suffit de penser à propos de l'exemple d'alignement de mémoire: Le nombre de 32 bits ne peut pas être aligné sur un 64 bit limite intégrale qui des moyens de chargement du nombre nécessite de décalage et le masquage du nombre après le chargement dans un S'inscrire. À tout le moins, chaque numéro 32 bits doit être masquée avant chaque opération. Nous parlons au moins réduire de moitié la vitesse effective lors de la manipulation 32 ou 16 bits entiers du processeur en mode 64 bits.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top