L'allocation de mémoire pour la classe régulière classe statique statique méthode instanve méthode et des données des membres sur le tas et de la pile en c#?
La majeure partie du livre ne parlent jamais de la façon dont un programme à exécuter et à la façon dont la mémoire est alloué sur la pile et le tas. lorsque les données stockées sur la pile et quand sur le tas.
Supposons que j'ai une classe ordinaire comme
public class MyClass
{
int Age=0;
string strName="None"
Double Salary=0;
public void Data1()
{
Age=30;
strName="Robin";
Salary=3500;
}
}
Question
1) donc pour la classe ci-dessus l'utilisation de la mémoire allouée. lors de l'exécution de programme, la mémoire est allouée ou lorsque nous créons instance puis la mémoire sera allouée. lorsque nous appelons Data1()
par exemple alors ce qui se passe, et l'utilisation de la mémoire allouée. la mémoire sera allouée pour l'appel de fonction ou de données d'initialisation de membre? me dire la quantité de mémoire allouée pour age
, name
et salary
. la mémoire sera allouée sur la pile ou le tas.
public class MyClass
{
static int y=0;
static string strComp="None"
int Age=0;
string strName="None"
Double Salary=0;
public void Data1()
{
Age=30;
strName="Robin";
Salary=3500;
}
public static void Data3()
{
y=50;
strComp="Hello";
}
}
2) comment et quand la mémoire est allouée pour la donnée membre statique et de la fonction. lorsque nous appelons, comme
MyClass.Data3()
puis la mémoire sera allouée ou lorsque nous venons d'exécuter les applications. la mémoire est allouée sur le tas ou de la pile?
3) comment memroy est alloué pour la classe statique. statique de la classe stockées sur le tas ou de la pile...si pile alors pourquoi?
ici, j'ai demandé demandé couple de question, veuillez expliquer en détail. merci.
OriginalL'auteur Mou | 2011-07-16
Vous devez vous connecter pour publier un commentaire.
1.) La mémoire sera allouée lorsque vous créez une instance de la classe. Lorsque vous appelez
Data1()
aucune mémoire supplémentaire n'est nécessaire que vous vous êtes uniquement référence aux champs de l'instance de classe (et pas d'autres variables locales). DepuisMyClass
est un type de référence, la mémoire sera allouée sur le tas managé.2.) Les méthodes statiques ne consomme pas de mémoire. Les champs statiques sont initialisés avant de vous accédez à un champ statique ou de créer une instance de ce type, ils sont contenus dans (
MyClass
dans ce cas)3.) Vous ne pouvez pas créer une instance d'une classe statique, donc pas de mémoire allouée dynamiquement, uniquement lorsque le type lui-même est créé. Les classes statiques sont garantis pour être chargés et ont leurs champs initialisés et leur constructeur statique appelée avant la classe est référencé pour la première fois dans votre programme. Une fois créé une classe statique reste en mémoire jusqu'à ce que votre domaine d'application est à l'arrêt.
méthodes/fonctions ne consomme pas de mémoire, seuls les "données" ne
OriginalL'auteur BrokenGlass
Tout d'abord, une instance de classe est créé que lorsque vous serez en créer un avec le nouveau() de la directive.
Que lorsqu'une nouvelle instance est créée la mémoire est allouée, y compris tous les champs de l'objet.
Statique, les membres n'appartiennent pas à une instance d'objet de la classe.
Vous pouvez pensez-y de cette façon: La classe elle-même est un objet qui représente le type de classe, et tous les membres statiques et méthodes appartiennent à cet objet. (Ce n'est pas vraiment comme ça, mais il est plus facile de comprendre le concept statique de cette façon).
La statique des membres de la classe sont créés au début du programme (ou lorsque la dll est chargée pour la première fois).
lorsque vous créez un nouvel objet avec new() il est créé dans le tas (avec tous ses membres).
Variables qui sont créés dans la pile appartiennent méthodes dans l'environnement d'exécution et seulement après, vous accéder au bloc dans lequel elles sont déclarées.
Lorsque vous créez une nouvelle instance d'une classe, la mémoire est allouée pour cette instance avec l'ensemble de ses membres (comme défini dans la classe). Méthode (fonction) les variables locales ne sont allouées lorsque la méthode est appelée.
OriginalL'auteur Yochai Timmer