Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2811 connectés 

  FORUM HardWare.fr
  Programmation
  C

  probleme de structure

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

probleme de structure

n°1602839
carot0
Posté le 23-08-2007 à 11:09:55  profilanswer
 

bonjour tout le monde, j'ai un petit soucis avec une structure.
Voici ma strucutre :

Code :
  1. struct CacheInfo //type 7
  2. {
  3. byte SocketDesignation;
  4. word Configuration;
  5. word MaxSize;
  6. word InstalledSize;
  7. word SupportedSRAM;
  8. word CurrentSRAM;
  9. byte Speed;
  10. byte ErrorCorrection;
  11. byte SystemeCacheType;
  12. byte Associativity;
  13. string *chaine;
  14. };
 

avec

Code :
  1. typedef char byte;
  2. typedef short word;
  3. typedef long dword;
  4. typedef long long qword;
 

et lors de l'utilisation de la strucuture

Code :
  1. int CacheLevel;
  2. remplistruct(&cache, header,mem);
  3.   cache.chaine=chaine(mem);
  4.   CacheLevel=(cache.Configuration&0x3)+1;
  5.   cout<<"cache L"<<CacheLevel<<endl;


le cout me sort une valeur qui ne me convient pas.

 


J'ai du coup essayé autre chose :

Code :
  1. struct CacheInfo //type 7
  2. {
  3. char test[15];
  4. }


Code :
  1. int CacheLevel;
  2. remplistruct(&cache, header,mem);
  3.   cache.chaine=chaine(mem);
  4.   CacheLevel=(cache.test[1]&0x3)+1;
  5.   cout<<"cache L"<<CacheLevel<<endl;
 

et la le resultat est ce qu'il faut !

 

Est ce que vous voyez ou je me suis planté car je prefere largement utiliser la 1ere  structure (le 2nd cas n'est qu'une illustration j'utiliserai pas de structure pour faire ca en temps normal)

 

OS linux Debian
Compilo gcc  4.1.3 20070629 (prerelease) (Debian 4.1.2-13)

Message cité 1 fois
Message édité par carot0 le 23-08-2007 à 11:17:01

---------------
In a world without walls and fences, who needs Windows and Gates
mood
Publicité
Posté le 23-08-2007 à 11:09:55  profilanswer
 

n°1602902
Emmanuel D​elahaye
C is a sharp tool
Posté le 23-08-2007 à 12:01:04  profilanswer
 

carot0 a écrit :

Code :
  1. int CacheLevel;
  2.   cout<<"cache L"<<CacheLevel<<endl;




Pas du C. Le forum C++, c'est à coté.
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1602907
carot0
Posté le 23-08-2007 à 12:05:11  profilanswer
 

Emmanuel Delahaye a écrit :


Pas du C. Le forum C++, c'est à coté.
 


le probleme n'est pas dans l'affichage mais dans la strucutre (qui est bien codé en C) on a qu'a dire que c'est un printf ca ne change rien au probleme!
 
Je me demande aussi si mon probleme n'est pas lié a un alignement mémoire...


---------------
In a world without walls and fences, who needs Windows and Gates
n°1602916
Taz
bisounours-codeur
Posté le 23-08-2007 à 12:25:07  profilanswer
 

rien compris, ni rien lu, juste que pour struct avec un aussi joli de nom que  CacheInfo, tu ferais bien de la tasser un peu en ordonnant les membres par taille décroissante.

n°1602917
carot0
Posté le 23-08-2007 à 12:33:45  profilanswer
 

Taz a écrit :

rien compris, ni rien lu, juste que pour struct avec un aussi joli de nom que  CacheInfo, tu ferais bien de la tasser un peu en ordonnant les membres par taille décroissante.


je l'aurai fait si c'etait possible mais cette structure est codé selon des données qui sont déja ordonné dans cet ordre (donc si je change l'ordre des champs ca deviendra incohérent)

 

quelqu'un sais comment désactiver l'alignement mémoire des strucutre avec gcc ?

 

edit : il te plait pas le nom de ma structure ?

Message cité 1 fois
Message édité par carot0 le 23-08-2007 à 12:34:27

---------------
In a world without walls and fences, who needs Windows and Gates
n°1602920
Emmanuel D​elahaye
C is a sharp tool
Posté le 23-08-2007 à 12:42:30  profilanswer
 

carot0 a écrit :

je l'aurai fait si c'etait possible mais cette structure est codé selon des données qui sont déja ordonné dans cet ordre


Faute de conception (code non portable). Il faut utiliser un tableau de unsigned char et manipuler les octets à la main. On écrit les 2 fonction de conversion de/vers des structures internes et ça marche.

 

Message cité 1 fois
Message édité par Emmanuel Delahaye le 23-08-2007 à 12:43:17

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1602922
Taz
bisounours-codeur
Posté le 23-08-2007 à 12:45:02  profilanswer
 

__attribute__

n°1602924
carot0
Posté le 23-08-2007 à 12:47:17  profilanswer
 

Emmanuel Delahaye a écrit :


Faute de conception (code non portable). Il faut utiliser un tableau de unsigned char et manipuler les octets à la main. On écrit les 2 fonction de conversion de/vers des structures internes et ça marche.
 


ouais... ce qui y a c'est que des structure comme elles j'en est une 15aines donc la j'ai de quoi me prendre la tête pour longtemps ...
 
pour le __attribute__ je sais pas ce que c'est, je vais donc voir ca sur google.


---------------
In a world without walls and fences, who needs Windows and Gates
n°1602941
carot0
Posté le 23-08-2007 à 13:46:16  profilanswer
 

Taz a écrit :

__attribute__


thx ca a marché !!  
avec un __attribute__ ((packed))


---------------
In a world without walls and fences, who needs Windows and Gates
n°1602964
Emmanuel D​elahaye
C is a sharp tool
Posté le 23-08-2007 à 14:15:22  profilanswer
 

carot0 a écrit :


thx ca a marché !!  
avec un __attribute__ ((packed))


Jusqu'au jour où tu passes de x86 à PowerPC...
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
mood
Publicité
Posté le 23-08-2007 à 14:15:22  profilanswer
 

n°1602969
Taz
bisounours-codeur
Posté le 23-08-2007 à 14:23:35  profilanswer
 

ou juste en 64bits

n°1602981
carot0
Posté le 23-08-2007 à 14:51:37  profilanswer
 

Taz a écrit :

ou juste en 64bits


comment faire pour que ca marche en 64bit aussi ? ( mon programme n'est prévue que pour PC )


---------------
In a world without walls and fences, who needs Windows and Gates
n°1602984
Un Program​meur
Posté le 23-08-2007 à 15:06:42  profilanswer
 

Emmanuel a deja donne la reponse.   Il faut manipuler les octets un a un.

n°1602985
carot0
Posté le 23-08-2007 à 15:08:28  profilanswer
 

Un Programmeur a écrit :

Emmanuel a deja donne la reponse.   Il faut manipuler les octets un a un.


ha .... ca va être trop la misere alors ... thx
 
edit : en fait je comprends  pourquoi le "__attribute__ ((packed));" marcherai pas sur les autre archi ?
sachant que je fournirai pas le binaire mais le code sources + un make ou le binaire pour des archi bien spécifique.


Message édité par carot0 le 23-08-2007 à 15:48:27

---------------
In a world without walls and fences, who needs Windows and Gates

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  probleme de structure

 

Sujets relatifs
Opérations matrices problème structure pointeur[xml-xsl] Probleme de structure de fichier xsl
probleme structure chaine de caracteresAmélioration de la structure des tables - problème d'évolution
Probléme avec une structureproblème de copie de structure
Probleme de free sur une structureProbleme de taille de structure avec char[] et double
Probléme de tri et affichage d'élément dans une structureProbleme tableau 2 dimensions + structure en C
Plus de sujets relatifs à : probleme de structure


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR