web-dev-qa-db-fra.com

16 bits int contre 32 bits int vs 64 bits int

Je me suis demandé cela depuis longtemps depuis que je n'ai jamais eu d'éducation "formelle" sur l'informatique (je suis à Highschool), alors veuillez excuser mon ignorance sur le sujet.

Sur une plate-forme qui soutient les trois types d'entiers énumérés dans le titre, ce qui est meilleur et pourquoi? (Je sais que chaque type d'int a une longueur différente en mémoire, mais je ne suis pas sûr de ce que cela signifie ou de la manière dont cela affecte la performance ou, d'un point de vue du développeur, lequel a plus d'avantages sur l'autre).

Merci d'avance pour votre aide.

17
arturovm

"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 tels que la 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 la CPU peut consommer ou produire dans un seul cycle. (C'est une explication vraiment simpliste, mais cela obtient l'idée générale entre).

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

Ainsi, sur une plate-forme 32 bits, un entier de 16 bits chargés dans une adresse 32 bits devra avoir 16 morceaux à zéro de sorte que la CPU puisse y utiliser; Un entier 32 bits serait immédiatement utilisable sans aucune altération et un entier 64 bits devra être exploité sur deux ou plusieurs cycles de processeur (une fois pour les 32 bits bas, puis à nouveau pour les 32 bits hauts) .

Inversement, sur une plate-forme de 64 bits, des entiers de 16 bits devraient disposer de 48 bits à zéro, des entiers 32 bits devraient avoir 32 bits à zéro et que des entiers de 64 bits pourraient être utilisés immédiatement.

Chaque plate-forme et la CPU dispose d'un bit-ness "natif" (comme 32 ou 64), ce qui limite généralement certaines des autres ressources pouvant être accessibles par cette CPU (par exemple, la limitation de la mémoire 3GB/4 Go de processeurs 32 bits ). Les processeurs de la famille des processeurs 80386 (et de la version ultérieure X86) ont effectué 32 bits la norme, mais maintenant des sociétés telles que AMD, puis Intel rendant actuellement 64 bits la norme.

26
M. Shawn Dillon

Pour répondre à votre première question, l'utilisation d'un 32 bits vs a 32 bits VS A 64 bits dépend du contexte qu'il est utilisé. Par conséquent, vous ne pouvez vraiment pas en dire que l'un est meilleur sur l'autre, par exemple. Cependant, selon une situation, en utilisant un sur un autre est préférable. Considérez cet exemple. Disons que vous avez une base de données avec 10 millions d'utilisateurs et que vous souhaitez stocker l'année, ils sont nés. Si vous créez un champ dans votre base de données avec un entier 64 bits, vous avez épuisé 80 mégaoctets de votre stockage; Alors que, si vous utilisiez un champ 16 bits, seuls 20 mégaoctets de votre stockage seront utilisés. Vous pouvez utiliser un champ 16 bits ici car l'année que les personnes nées sont plus petites que le plus grand nombre de 16 bits. En d'autres termes 1980, 1990, 1991 <65535, en supposant que votre domaine est non signé. Dans l'ensemble, cela dépend du contexte. J'espère que ça aide.

9
WindsurferOak

Une réponse simple consiste à utiliser le plus petit que vous connaissez sera en sécurité pour la plage de valeurs possibles qu'il contiendra.

Si vous savez que les valeurs possibles sont contraintes d'être inférieure à un entier de 16 bits de longueur maximum (par exemple, la valeur correspondant à quel jour de l'année c'est - toujours <= 366) puis utilisez cela. Si vous n'êtes pas sûr (par exemple, l'ID d'enregistrement d'une table dans une base de données pouvant avoir un nombre quelconque de lignes), utilisez INT32 ou INT64 en fonction de votre jugement.

D'autres peuvent probablement vous donner un meilleur sentiment des avantages de la performance en fonction de la langue 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 de plus grand.

Juste pour référence, un entier 16 bits signifie que 2 ^ 16 valeurs possibles sont généralement représentées entre 0 et 65 535. Les valeurs 32 bits vont de 0 à 2 ^ 32 - 1, ou un peu plus de 4,29 milliards de valeurs.

Cette question sur les processeurs 32 bits, est un type "entier" plus efficace qu'un type "court"? Peut ajouter de plus de bonnes informations.

4
nycdan

Cela dépend de la rapidité ou du stockage doit être optimisé. Si vous êtes intéressé par la vitesse et que vous exécutez SQL Server en mode 64 bits, puis les touches 64 bits sont ce dont vous avez besoin. Un processeur 64 bits fonctionnant en mode 64 bits, est optimisé pour utiliser des numéros et des adresses de 64 bits. De même, un processeur 64 bits fonctionnant en mode 32 bits est optimisé pour utiliser des nombres et des adresses 32 bits. Par exemple, en mode 64 bit, toutes les pousses et les apparaissent sur la pile sont de 8 octets, etc. La récupération de cache et de mémoire sont à nouveau optimisées pour les numéros et adresses de 64 bits. Le processeur, fonctionnant en mode 64 bits, peut avoir besoin de plus de cycles de machine pour gérer un nombre de 32 bits, comme un processeur, fonctionnant en mode 32 bits nécessitent plus de cycles de machine pour gérer un nombre de 16 bits. Les augmentations du temps de traitement viennent pour de nombreuses raisons, mais pensez simplement à l'exemple de l'alignement de la mémoire: le nombre de 32 bits peut ne pas être aligné sur une limite intégrale de 64 bits, ce qui signifie que le chargement du nombre nécessite de transférer et de masquer le nombre après le chargement d'un. S'inscrire. À tout le moins, tous les 32 bits doivent être masqués avant chaque opération. Nous parlons au moins de réduire de moitié la vitesse effective du processeur tout en manipulant 32 ou 16 bits entier en mode 64 bits.

1
Jack D Menendez