2009-05-05 8 views
4

J'ai une liste d'éléments qui ne contiennent peut-être que dix variables. Mais les articles ont un bon code, et j'aimerais en ajouter d'autres. Je suis curieux de savoir comment cela va affecter la taille de ma structure. Mon intuition me dit que chacun a une pile, mais avec des arguments se faisant passer et des choses que je n'ai probablement pas considérées, je ne suis pas sûr. Donc à peu près combien le code est-il ajouté à ma structure de données?Est-ce que la quantité de code augmente la structure des données?

Répondre

10

Le code n'ajoute pas à la taille de votre structure.

3

Le code associé à une classe n'est généralement pas dupliqué par instance, donc l'ajout de code ne devrait pas avoir d'impact sur la taille de votre liste.

3

Même si vous placez le code dans le même ensemble d'accolades que les données, le compilateur le séparera et le placera dans une section de mémoire différente. De cette façon, vous n'avez besoin que d'une copie du code - il n'est pas nécessaire de faire une nouvelle copie pour chaque élément qui l'utilise.

La taille réelle du code compilé ne pose problème que dans les projets de très grande taille. Habituellement, ce n'est pas beaucoup plus grand que le texte source. Sur les petits programmes, c'est typiquement quelques centaines de K ou un ou deux méga au plus. Cela ne vaut pas la peine de s'inquiéter des machines modernes.

+0

En fait, le code compilé est généralement considérablement plus petit que la représentation de la source. –

+0

Maintenant que j'y pense, vous avez certainement raison quand il s'agit de C#. Je suis plus habitué au C++, où un "cout" égaré peut finir par compiler et lier dans une quantité incroyable de code. – Charlie

1

Le code n'est pas stocké sur le tas.

Indépendamment du nombre d'objets que vous créez, vous ne disposez que du code au même endroit.

1

Les fonctions membres de classe sur lesquelles l'objet fonctionne sont stockées différemment et n'ont aucun effet sur la taille de l'objet. Où les membres de données à l'intérieur de la classe feront partie de l'objet et la taille de l'objet changera si vous changez le type de la variable.

ex:

class Test 
{ 
    1. member functions 

    //it does not matter how many functions you have, this section does not contribute 
    // to object size 

    2. member variables 
    //this contributes to the object size, define an int or double etc will change the object size 
} 
1

Chaque objet ne possède pas son propre pile. Les piles sont par fil/processus, pas par objet.

2

La taille d'une instance d'objet est (principalement) la somme de ses membres de données. Les membres de fonction ne sont pas stockés par instance et n'ont aucun effet sur la taille de l'instance.

Votre programme a une seule pile par thread. Lorsqu'une fonction est appelée, la mémoire de la pile est réservée pour chaque paramètre et variable de cette fonction et libérée lorsqu'elle revient.

Votre objet est stocké sur la pile s'il est instancié dans une fonction sans être nouveau. Si vous utilisez new, seule une référence est stockée sur la pile et l'instance elle-même est stockée sur le tas.

:)

Questions connexes