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

  FORUM HardWare.fr
  Programmation
  C++

  Représentation d'un objet en mémoire ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Représentation d'un objet en mémoire ?

n°231745
hellbilly
free smile
Posté le 21-10-2002 à 12:57:32  profilanswer
 


J'ai une fonction avec un argument de type pointeur sur objet. Cette fonction accède au données privées de l'objet mais ce que je pige pas c'est que je dois faire un décalage de 32 bits pour  
accéder à ces variables.
 
Exemple :
 
class Object
{
  private :
    DWORD dw1;
    DWORD dw2;
 
  public:
   Object();
   ~Object();
 
   ...
}
 
void funct(PObject pObj)
{
  LPDWORD lpdw = (LPDWORD)pObj + 1;
 
  cout << lpdw[0]; // OK.
  cout << lpdw[1]; // OK.
}
 
Pourquoi ce + 1 ? Y a quoi juste avant la première donnée membre ?

mood
Publicité
Posté le 21-10-2002 à 12:57:32  profilanswer
 

n°231749
antp
Super Administrateur
Champion des excuses bidons
Posté le 21-10-2002 à 13:01:55  profilanswer
 

houlà... spa très propre ça, et surtout très aléatoire :D


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°231755
hellbilly
free smile
Posté le 21-10-2002 à 13:09:01  profilanswer
 

antp a écrit a écrit :

houlà... spa très propre ça, et surtout très aléatoire :D




ha bon pourquoi ?

n°231757
chrisbk
-
Posté le 21-10-2002 à 13:09:51  profilanswer
 

ben c crado, deja t pas censé acceder au membre private  
 
t'aurais pas une fonction virtuelle qui traine, dans le code ?

n°231761
hellbilly
free smile
Posté le 21-10-2002 à 13:16:08  profilanswer
 

chrisbk a écrit a écrit :

ben c crado, deja t pas censé acceder au membre private  
 
t'aurais pas une fonction virtuelle qui traine, dans le code ?




 
Si je le fais c'est pour une bonne raison  :)  
 
Sinon en fait ma classe Object n'est constituée que de méthodes virtuelles pures.

n°231766
BENB
100% Lux.
Posté le 21-10-2002 à 13:19:11  profilanswer
 

hellbilly a écrit a écrit :

 
ha bon pourquoi ?




 
Ton code depend de l'implementation, et meme des options de compilaton (alignement des données)...
 
Sinon il ne devrait pas y avoir ce décalage, sauf s'il y a au moins une fonction vituelle, ou si ton objet herite d'un autre...

n°231770
chrisbk
-
Posté le 21-10-2002 à 13:23:37  profilanswer
 

hellbilly a écrit a écrit :

 
 
Si je le fais c'est pour une bonne raison  :)  
 
Sinon en fait ma classe Object n'est constituée que de méthodes virtuelles pures.




ben voila
 
une fonction virtuelle te bouffe 4 octets  / fonctions....
(eg le pointeur vers la fonction cible)

n°231771
chrisbk
-
Posté le 21-10-2002 à 13:24:20  profilanswer
 

BENB a écrit a écrit :

 
 
Ton code depend de l'implementation, et meme des options de compilaton (alignement des données)...
 
Sinon il ne devrait pas y avoir ce décalage, sauf s'il y a au moins une fonction vituelle, ou si ton objet herite d'un autre...




 
bref, dans tous les cas tu peux pas prevoir le coup, tu peux faire un code qui marchera pour l'etat actuel mais si jamais plus tard tu rajoutes une fonction virtuelle alors fodra tout recommencer....

n°231776
BENB
100% Lux.
Posté le 21-10-2002 à 13:28:40  profilanswer
 

chrisbk a écrit a écrit :

 
ben voila
 
une fonction virtuelle te bouffe 4 octets  / fonctions....
(eg le pointeur vers la fonction cible)
 




 :non:  
 
Normalement un pointeur en tout et pour tout :D
 
Il pointe sur la fameuse Vtable qui elle contient une entrée par fonction. Cette VTable est en qq sorte une variable statique, toutes les objets d'une meme classe partagent la meme....
 
Mais bien sur il s'agit de l'implementation la commune, d'autres sont possibles (la tienne par exemple...:D)

n°231780
chrisbk
-
Posté le 21-10-2002 à 13:30:57  profilanswer
 

BENB a écrit a écrit :

 
 :non:  
 
Normalement un pointeur en tout et pour tout :D
 
Il pointe sur la fameuse Vtable qui elle contient une entrée par fonction. Cette VTable est en qq sorte une variable statique, toutes les objets d'une meme classe partagent la meme....
 
Mais bien sur il s'agit de l'implementation la commune, d'autres sont possibles (la tienne par exemple...:D)




 
heuh ouais, effectivement, c mieux comme ca
 
 
 

mood
Publicité
Posté le 21-10-2002 à 13:30:57  profilanswer
 

n°231781
hellbilly
free smile
Posté le 21-10-2002 à 13:30:58  profilanswer
 

chrisbk a écrit a écrit :

 
 
bref, dans tous les cas tu peux pas prevoir le coup, tu peux faire un code qui marchera pour l'etat actuel mais si jamais plus tard tu rajoutes une fonction virtuelle alors fodra tout recommencer....




Est-ce que l'ordre des fonctions virtuelles a une importance ? Si par exemple j'en rajoute une mais en dernière position ca devrait pas modifier le début de l'objet. Bon normalement mon objet ne devrait plus être modifier mais on sait jamais...
Sinon je sais toujours pas pourquoi mes données se trouvent juste apres ce premier pointeur ??

n°231782
chrisbk
-
Posté le 21-10-2002 à 13:32:06  profilanswer
 

hellbilly a écrit a écrit :

 
Est-ce que l'ordre des fonctions virtuelles a une importance ? Si par exemple j'en rajoute une mais en dernière position ca devrait pas modifier le début de l'objet. Bon normalement mon objet ne devrait plus être modifier mais on sait jamais...
Sinon je sais toujours pas pourquoi mes données se trouvent juste apres ce premier pointeur ??




 
Nan, cf l'explication de BENB juste au dessus :D  
 
 
bah dans le fond c logique qu'on mette la vtable au debut. Au moins on la retrouve toujours, quelque soit les données contenues dans l'objet (pense au polymorphisme ou t'as pas une idée exacte du type de l'objet sur lequel tu bosses)


Message édité par chrisbk le 21-10-2002 à 13:32:38
n°231790
hellbilly
free smile
Posté le 21-10-2002 à 13:39:49  profilanswer
 

chrisbk a écrit a écrit :

 
 
Nan, cf l'explication de BENB juste au dessus :D  
 
 
bah dans le fond c logique qu'on mette la vtable au debut. Au moins on la retrouve toujours, quelque soit les données contenues dans l'objet (pense au polymorphisme ou t'as pas une idée exacte du type de l'objet sur lequel tu bosses)




 
c'est bon j'avais pas vu la reponse de BENB. Tout s'explique maintenant, merci !

n°231836
BENB
100% Lux.
Posté le 21-10-2002 à 14:40:48  profilanswer
 

chrisbk a écrit a écrit :

 
 
Nan, cf l'explication de BENB juste au dessus :D  
 
 
bah dans le fond c logique qu'on mette la vtable au debut. Au moins on la retrouve toujours, quelque soit les données contenues dans l'objet (pense au polymorphisme ou t'as pas une idée exacte du type de l'objet sur lequel tu bosses)




 
Exactement !
 
Se trouvent au debut de la vtable les fonctions virtuelles des classes dont on herite (je ne parles pas d'héritage multiple :D)
 
et les membres de la classe ne sont pas déplacés...


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

  Représentation d'un objet en mémoire ?

 

Sujets relatifs
[C] Problème de libération mémoire \Visual C++recherche topic avec morceau de c++ ultra objet / test d'embauche
[SCANF] Allouer la mémoire automatiquement ?[c++] Representation du 0?
Quand je fais appel à un objet ole automation...[PERL] Problème d'allocation de la mémoire
visual basique c bien en language orienter objet ?Appeller un objet Java depuis C (ou C++)
[VB] Runtime error - Overflow .... PB Memoire ????[ASP-ACCESS] Cette op... pas autorisée si l'objet est fermé. [Corrigé]
Plus de sujets relatifs à : Représentation d'un objet en mémoire ?


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