Schématiquement, un objet est une structure C avec en plus des méthodes.
Au niveau de l'assembleur, on a des données et du code.
Les données peuvent être allouées sur la pile, ou sur le tas (ou dans d'autres parties (cela dépend de la définition du mot "tas" )).
Cela dépend des objets.
Les noms des données ont des préfixes et/ou des suffixes pour différencier les contextes, les circonstances d'utilisation des objets.
Ce naming peut être assez complexe.
Le code est celui des méthodes.
En plus de cela, il y a des certaines particularités éventuelles à traiter comme le cas des fonctions virtuelles.
Elles nécessitent un traitement dynamique. Le compilateur ne peut pas savoir quelle fonction il faudra appeler.
Donc, le compilateur créé une table des fonctions virtuelles, et il inclut un bout de code qui fera le choix de la bonne fonction lors de l'exécution.
Donc, en résumé, on a, non seulement des données mais aussi du code derrière les objets, et on a des choses pré-determinées, et d'autres qui le sont lors de l'exécution.