2017-10-05 9 views
0

Je sais que les modèles de données suivants existent:Linux Modèle de données et les types primitifs taille

  • 32 bits * nix: ILP32
  • 32 bits de Windows: ILP32
  • 32 bits OS X : ILP32
  • 64 bits * nix: LP64
  • 64 bits Windows: LLP64
  • 64 bits OS X: LP64

http://www.unix.org/whitepapers/64bit.html

La version 64 bits du noyau Linux utilise le modèle de données LP64 (http://www.unix.org/version2/whatsnew/lp64_wp.html).

MISE À JOUR

C++ 03 standard 5.3.3 $/1

sizeof (char), sizeof (char signé) et sizeof (unsigned char) sont 1; le résultat de sizeof appliqué à tout autre type fondamental (3.9.1) est défini par l'implémentation. [Note: en particulier, sizeof (bool) et sizeof (wchar_t) sont l'implémentation defined.69)

La vraie question est: le compilateur (gcc) prendre en compte le modèle de données choisi par l'OS (linux par exemple)?

+1

Qu'en est-il du compilateur utilisé pour compiler le système d'exploitation? –

+0

Ron, les deux langues ne définissent pas la taille du type primitif. La question est valable et je sais que ce sont deux langues différentes. Le point ici est entre le système d'exploitation (modèle de données choisi) et les compilateurs. – Kasper

+0

@Ron: non! La norme C et C++ ne définit pas la taille du type primitif! exception pour char, float et double. – Kasper

Répondre

0

Un compilateur compile pour une cible spécifique. Certains compilateurs n'ont qu'une cible ou un ensemble très limité de cibles. Depuis que vous avez demandé gcc comme exemple, en regardant leur documentation révèle leurs formats pour Machine Descriptions et Target Files.

Their documentation mentions

Par défaut, GCC compile le code pour le même type de machine que vous utilisez. Cependant, il peut également être installé comme un compilateur croisé

alors assurez-vous de vérifier la sortie de gcc -v ou gcc -dumpmachine pour voir ce que la cible par défaut est.