Pourquoi est-int généralement de 32 bits sur 64 bits compilateurs?

Pourquoi est int généralement de 32 bits sur 64 bits compilateurs? Quand j'ai commencé la programmation, j'ai appris int est généralement de la même largeur que l'architecture sous-jacente. Et je suis d'accord que cela fait sens, je trouve ça logique pour une quelconque largeur entier pour être aussi large que la plateforme sous-jacente (à moins que nous parlons de 8 ou 16 bits de machines, où une petite plage pour int aura à peine le cas échéant).

Plus tard, j'ai appris int est généralement de 32 bits sur la plupart des 64 bits plates-formes. Donc je me demande quelle est la raison de cette. Pour le stockage des données, je préfère explicitement largeur spécifiée pour le type de données, ceci laisse donc générique utilisation pour int, qui n'offre pas d'avantages en termes de performances, au moins sur mon système, j'ai le même rendement à 32 bits et 64 bits des nombres entiers. Ce qui laisse le binaire de la mémoire, ce qui serait légèrement réduit, mais pas par beaucoup...

  • Eh bien, c'est agréable d'avoir un type de chaque longueur en bits, n'est-ce pas? Malheureusement, alors int perd son statut de "natif de la longueur des mots de type".
  • Il y a longtemps de cela. Ensuite, long long
  • Je recommande la lecture de ceci la réponse. La norme C++ exige seulement que, s'inscrit à l'intérieur d'une fourchette. 32 bits ajustement à l'intérieur de cette plage et à la mise en œuvre, s'ils en font un 32 bits ou 64 bits.
  • vous pouvez également lire en.wikipedia.org/wiki/64-bit_computing#64-bit_data_models.
  • ... et int32_t, int64_t ....
  • Vous n'aurez pas les mêmes performances pour les 32 bits et 64 bits des nombres entiers. Convertissez toutes vos données à partir de 32 à 64 bits, et vous avez doublé votre utilisation de la mémoire. Votre cache est seulement la moitié de l'utile maintenant.
  • La question fondamentale est la suivante: 64 bits int-être plus rapide (sur 64 bits arc) de 32 bits?
  • Je veux dire enregistrer les opérations, ils sont tout aussi vite, j'ai noté que l'empreinte mémoire est réduite.
  • Vous devriez lire Ce que devrait être la sizeof(int) sur une machine 64 bits? et la taille d'un int dépend du compilateur et/ou le processeur?
  • C'est vide de sens afin de discuter des résultats en ne considérant que le temps pris pour effectuer des opérations sur les registres. Les performances de la mémoire est souvent le chemin critique.
  • Je ne serais même pas utiliser "souvent" - même L1 accès est lent par rapport à enregistrer des opérations, l'accès à la ram - énormément plus. Mais le scénario que j'ai utilisé pour les tests a cache et prefetch sympathique alors qu'il n'a pas la faveur des entiers 32 bits sur 64 à tous les...
  • Le Cache est une mémoire trop. Une fois que votre problème de taille dépasse la taille du cache alors ce que vous dites n'est plus le cas. Les architectures et les langues n'ont pas été conçus pour résoudre votre problème spécifique. Ils sont conçus de manière générale. Et si le cache est un facteur limitant alors faire int 64 bits serait de la folie.
  • mon point était que j'utilise rarement int pour les données réelles de stockage, je l'utilise pour les compteurs, qui sont créés sur le registre et n'a même jamais déplacé à la ram.

InformationsquelleAutor | 2013-07-05