Java
Помогите со стеком
Вот объясните барану, стек это структура наподобие рожка автомата (последний вошёл первый вышел) если мы объявляем перемену например "int a=10 " потом "int b =20" они попадают в стек, после этого я изменяю пременую "а" переменую "b" я не трогал. Как так ?? Ведь должна сначала удалится переменая "b" со стека так как она первая на очереди и по правилах через нее я перешагнуть не могу? У меня плавятся мозги помогите плиз !
Вне майн int a=10
будет создана на этапе компиляции в глобальной области, то бишь в самой программе. Когда программа запустится, то бишь запишется, то и будет адрес памяти.
Стек по существу тоже область памяти, но стек задается вот описанием переменной в функции
void f(int a, int b)
{
}
Хоть и заданы две и созданы int типа, но доступ к ним есть свободный через указатель на стек. Когда из функции выйдешь то только тогда стек свернется, то бишь ты патроны заберешь из рожка.
будет создана на этапе компиляции в глобальной области, то бишь в самой программе. Когда программа запустится, то бишь запишется, то и будет адрес памяти.
Стек по существу тоже область памяти, но стек задается вот описанием переменной в функции
void f(int a, int b)
{
}
Хоть и заданы две и созданы int типа, но доступ к ним есть свободный через указатель на стек. Когда из функции выйдешь то только тогда стек свернется, то бишь ты патроны заберешь из рожка.
Ты не помещаешь никуда свои переменные, а только копируешь их значения в стек. С самими переменными ты дальше можешь делать что хочешь и в какой угодно последовательности.
По факту стэк нужен для контролирования памяти при вызове функция, В действительности же ты, именованными переменными, ссылаешся на конкретную ячейку в этом стеки и он уже больше куча (heap) нежели стек.
Стекфрейм в Джаве - это массив переменных + стек инструкций. Некоторые инструкции умеют адресоваться в этот массив.
int a = 10;
int b = 20;
a = 30;
компилируется в такой байткод:
0: bipush 10 // помещаем на вершину 10
2: istore_1 // делаем pop c вершины стека, помещаем значение в переменную по отступу 1
3: bipush 20 // стек пуст; помещаем на вершину 20
5: istore_2
6: bipush 30
8: istore_1
9: return
Понятия "стек" и "стекфрейм" в контексте Джавы иногда путают.
int a = 10;
int b = 20;
a = 30;
компилируется в такой байткод:
0: bipush 10 // помещаем на вершину 10
2: istore_1 // делаем pop c вершины стека, помещаем значение в переменную по отступу 1
3: bipush 20 // стек пуст; помещаем на вершину 20
5: istore_2
6: bipush 30
8: istore_1
9: return
Понятия "стек" и "стекфрейм" в контексте Джавы иногда путают.
Похожие вопросы
- C# Помогите написать генератор паролей на C# ,что бы он мог генерировать нужное кол-во паролей.
- Помогите найти и настроить Java сервер Lineage II HF
- Помогите разобрать программу java
- Помогите понять как решить задание по Java.
- Ошибка с java в intellij idea помогите пожалуйста
- РЕБЯТ, ПОМОГИТЕ С ЗАДАЧЕЙ ПОЖАЛУЙСТА!
- Помогите с выбором Java IDE
- Помогите please решить задачу Java: Дано координату шахматного коня например е2.Требуется вывести все варианты хода коня
- Помогите с задачей !
- Помогите с заданием, я примерно понимаю почему стоит переместить этот метод, но хочу удостовериться, послушав ваше мнени