Una pregunta muy interesante y de gran dificultad, al menos mientras no entendemos muchos conceptos de programación.

En el siguiente código C#,

public void Method1()
{
    int i = 4;
    int y = 2;
    class1 cls1 = new class1();
}

Ahora tenemos una representación gráfica del comportamiento de este método en memoria.

220_memoria_stack_heap

Las variables locales que sólo necesitan durar tanto como la invocación de la función van en la pila o stack. El heap (o montón) se utiliza para las variables cuya vida útil no se sabe muy bien por adelantado, pero se espera que duren un tiempo. En la mayoría de los idiomas es fundamental que sepamos en tiempo de compilación qué tan grande es una variable si queremos almacenarla en la pila.

(Objetos que varían en tamaño, ya que los actualizamos) van en el heap, porque no sabemos en tiempo de creación cuánto tiempo van a durar. En muchos idiomas es el heap (montón) de basura recolectada para encontrar objetos (como el objeto CLS1) que ya no tiene ninguna referencia.

En Java, la mayoría de los objetos van directamente en el montón. En lenguajes como C / C ++, estructuras y clases a menudo pueden permanecer en el stack (pila) cuando no se está tratando con punteros, obviamente funcionan de manera diferente los lenguajes administrados que los nativos (C / C++).

Más información se puede encontrar en www.codeproject.com/Articles/76153/Six-important-NET-concepts-Stack-heap-value-types#Stack%20and%20Heap

(Visitado 654 veces, 1 visitas hoy)