Je me demandais combien de mémoire est un objet qui hérite d'un "objet" et n'a pas de champs / propriétés? Et je suppose que les méthodes ne le font pas. Droit ? Je parle d'objets .NET. P>
3 Réponses :
La seule générale que vous encourageez avec un type de référence serait de 4 octets pour le pointeur d'objet de type et 4 octets pour l'indice de bloc de synchronisation. P>
donc au total, 8 octets de frais généraux. P>
Un objet a deux références / points-points supplémentaires à ses propres données. P>
Donc, sur un système 32 bits, l'objet prendrait 8 octets, sur un système 64 bits qu'il prendrait 16 octets. P>
Correction:
Comme indiqué Jon, la taille minimale d'un objet est de 12 octets. Les informations que j'ai trouvées jusqu'à présent indiquent que le GC l'exige. P>
Nope - Il y a une taille d'objet minimale de 12 octets sur x86, pour une raison quelconque, mais vous obtenez le premier champ "gratuit" :)
Selon ce msdn.microsoft.com/en-us/magazine/cc163791.aspx Le GC nécessite que l'objet soit d'au moins 12 octets pour une raison quelconque.
D'accord, comme Andrew et Guffa ont donné des réponses que je crois avoir mal ...
Il y a une surcharge de 8 octets pour tous les objets (sur x86), mais il y a aussi em> taille de 12 octets. Je ne sais pas pourquoi ... mais cela signifie que ces deux classes em> prennent 12 octets par instance: p> test: p > >test 1000000 NoFields
Size per instance: 12.000024
>test 1000000 OneField
Size per instance: 12.000024
>test 1000 NoFields
Size per instance: 12
>test 1000 OneField
Size per instance: 12
Bon point sur le minimum de 12 octets, mais je pense que l'esprit de la question concernait exactement quelles informations sont "héritées" de system.Object code>. Vous êtes correct que sur X86, le premier champ est «gratuit» pour ainsi dire, mais sans la surcharge de
System.Object code>, les 3 premiers champs ont pu être libres :) Néanmoins, +1 à vous pour cette distinction importante.
Bonne question. Je dirais créer un million d'entre eux et voir la différence de mémoire avant et après. Sauf si quelqu'un a déjà fait cela.
C'est pourquoi j'ai demandé. J'avais besoin de connaître l'utilisation de la mémoire d'application avec des millions d'objets. La réponse de l'application 32 bits est donc la taille de tous les champs +8 octets.