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

Représentation d'un objet en mémoire ? - C++ - Programmation

Marsh Posté le 21-10-2002 à 12:57:32    


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 ?

Reply

Marsh Posté le 21-10-2002 à 12:57:32   

Reply

Marsh Posté le 21-10-2002 à 13:01:55    

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


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 21-10-2002 à 13:09:01    

antp a écrit a écrit :

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




ha bon pourquoi ?

Reply

Marsh Posté le 21-10-2002 à 13:09:51    

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

Reply

Marsh Posté le 21-10-2002 à 13:16:08    

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.

Reply

Marsh Posté le 21-10-2002 à 13:19:11    

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...

Reply

Marsh Posté le 21-10-2002 à 13:23:37    

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)

Reply

Marsh Posté le 21-10-2002 à 13:24:20    

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....

Reply

Marsh Posté le 21-10-2002 à 13:28:40    

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)

Reply

Marsh Posté le 21-10-2002 à 13:30:57    

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
 
 
 

Reply

Marsh Posté le 21-10-2002 à 13:30:57   

Reply

Marsh Posté le 21-10-2002 à 13:30:58    

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 ??

Reply

Marsh Posté le 21-10-2002 à 13:32:06    

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
Reply

Marsh Posté le 21-10-2002 à 13:39:49    

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 !

Reply

Marsh Posté le 21-10-2002 à 14:40:48    

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...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed