Общий стек для некоторых открытых переменных - PullRequest
0 голосов
/ 27 сентября 2011

Кто-то из переполнения стека ответил: «Стек присоединен к потоку, поэтому, когда поток выходит из стека, он освобождается».Но как насчет открытых переменных, как они управляются после завершения потока?

НапримерОбъявленная общедоступная переменная, такая как

public partial class Form1 : Form
{
        int k = 10;

        private void button1_Click(object sender, EventArgs e)
        {            
            k = k + 5;
        }
}

Таким образом, при каждом нажатии кнопки 1 создается поток, который обновляет значение k и затем существует так, что в соответствии с этим стеком операторов должен быть восстановлен, а недавнее значение k должно быть потеряно, нов действительности он сохраняет это значение, и следующий щелчок кнопки изменит его сохраняемое значение на ex.от 1) 10 до 15 2) от 15 до 20 3) от 20 до 25 и т. д. *

Итак, мой вопрос, где хранятся такие глобальные переменные.Используется ли какой-либо другой стек для глобальных переменных.Также я буду использовать объект класса внутри функции для ex.например,

public function add (int a, int b)
{
       int c; 
       clsitem objitem = new clsitem();
       c=a+b + objitem.id;
       retun c;
}

, что будет с объектом objitem, будет ли он храниться в стеке и восстанавливаться при выходе из потока, или он останется в куче, поскольку является объектом

Ответы [ 2 ]

3 голосов
/ 27 сентября 2011

В приведенном здесь примере k не является переменной на основе стека - это поле класса Form1 и, следовательно, хранится вместе с экземпляром формы.

Два аргумента button1_click являются примерами стекапеременные на основе.

0 голосов
/ 27 сентября 2011

Пожалуйста, ознакомьтесь с этой статьей, в которой объясняется управление памятью и сборка мусора в C # .NET

http://csharpcomputing.com/Tutorials/Lesson6.htm

...