IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

struct calcsize sur machine 64 bits


Sujet :

Python

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 114
    Points : 129
    Points
    129
    Par défaut struct calcsize sur machine 64 bits
    Bonjour

    Sous une machine Linux 64 bits (Debian 5.0.3), avec un Python 3.1.1 installer depuis les sources ( tar jxvf, ./configure , make , make install), j'ai constaté cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Python 3.1.1 (r311:74480, Dec 29 2009, 08:08:44) 
    [GCC 4.3.2] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import struct
    >>> struct.calcsize("l")
    8
    >>> struct.calcsize("=l")
    4
    >>>
    NB : j'ai le même problème avec le python natif :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Python 2.5.2 (r252:60911, Jan  4 2009, 21:59:32) 
    [GCC 4.3.2] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import struct
    >>> struct.calcsize("l")
    8
    >>> struct.calcsize("=l")
    4
    >>>
    Je suis surpris, comment l'opérateur "=" qui ne doit être qu'un opérateur d'ordre d'octet modifie la longueur de la chaine ?

    Est-ce que quelqu'un peut m'aider ?

    Cordialement
    Emmanuel

  2. #2
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 478
    Points : 9 278
    Points
    9 278
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Puisque personne ne te répond, je m'y risque.

    J'ai essayé sur mon Windows 7 64 bits, et je trouve 4 et 4.

    Au delà, je ne peux que te suggérer de te rapprocher de la notice du module struct (ici de la v 2.6):

    If the first character is not one of these, '@' is assumed.

    Native byte order is big-endian or little-endian, depending on the host system. For example, Motorola and Sun processors are big-endian; Intel and DEC processors are little-endian.

    Native size and alignment are determined using the C compiler’s sizeof expression. This is always combined with native byte order.

    Standard size and alignment are as follows: no alignment is required for any type (so you have to use pad bytes); short is 2 bytes; int and long are 4 bytes; long long (__int64 on Windows) is 8 bytes; float and double are 32-bit and 64-bit IEEE floating point numbers, respectively. _Bool is 1 byte.

    Note the difference between '@' and '=': both use native byte order, but the size and alignment of the latter is standardized.
    Ainsi, le '=' ne concerne pas seulement la taille, mais aussi l'alignement. Il est possible que dans ton contexte, ce soit l'alignement qui provoque cet écart.

    Tyrtamos

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 08/04/2011, 11h55
  2. Réponses: 2
    Dernier message: 30/11/2010, 08h38
  3. Réponses: 2
    Dernier message: 11/08/2010, 17h23
  4. compilation 32 bits sur machine 64 bits
    Par meufeu dans le forum C++
    Réponses: 2
    Dernier message: 27/08/2009, 20h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo