Size: a a a

Unity Floodилка

2021 February 25

мм

макс максов... in Unity Floodилка
Хм
источник

AS

Anton Smetanin in Unity Floodилка
На стеке только локальные переменные и аргументы методов
источник

мм

макс максов... in Unity Floodилка
Хм
источник

AS

Anton Smetanin in Unity Floodилка
макс максов
То есть  с каждым вызовом функции стек отчистится ?
Представь, что стек — это большой массив, и ты хранишь индекс первого свободного элемента. Допустим этот индекс равен 25. Когда ты хочешь вызвать функцию, у которой 7 локальных переменных/параметров, ты сдвигаешь этот индекс на 7 вперёд, до 32. И функция хранит свои переменные в ячейках с 25 по 32. Когда она отработала, ты возвращаешь индекс обратно с 32 до 25. При этом старые значения по-прежнему хранятся в массиве.

После чего, ты хочешь вызвать другую функцию, у которой 5 локальных переменных. Опять сдвигаешь на 5 вперёд: с 25 до 30. И функция использует эти 5 ячеек. При этом в 31-й и 32-й ячейках до сих пор хранятся какие-то две из переменных первой функции.

Но у тебя всё равно к ним нет доступа, поэтому можно считать их удалёнными.
источник

мм

макс максов... in Unity Floodилка
Anton Smetanin
Представь, что стек — это большой массив, и ты хранишь индекс первого свободного элемента. Допустим этот индекс равен 25. Когда ты хочешь вызвать функцию, у которой 7 локальных переменных/параметров, ты сдвигаешь этот индекс на 7 вперёд, до 32. И функция хранит свои переменные в ячейках с 25 по 32. Когда она отработала, ты возвращаешь индекс обратно с 32 до 25. При этом старые значения по-прежнему хранятся в массиве.

После чего, ты хочешь вызвать другую функцию, у которой 5 локальных переменных. Опять сдвигаешь на 5 вперёд: с 25 до 30. И функция использует эти 5 ячеек. При этом в 31-й и 32-й ячейках до сих пор хранятся какие-то две из переменных первой функции.

Но у тебя всё равно к ним нет доступа, поэтому можно считать их удалёнными.
Ааа
источник

мм

макс максов... in Unity Floodилка
А когда именно они удаляются
источник

AS

Anton Smetanin in Unity Floodилка
Они просто переписываются новыми значениями, когда какая-то другая функция использует этот участок памяти
источник

AS

Anton Smetanin in Unity Floodилка
Намеренно они нигде не затираются нулями
источник

мм

макс максов... in Unity Floodилка
Ааа ну понятно
источник

мм

макс максов... in Unity Floodилка
Постоянно новые какие-то подробности )
источник

JD

John Dow in Unity Floodилка
Anton Smetanin
Намеренно они нигде не затираются нулями
а разве гарбич коллектор их не удаляет в какой-то момент ?
источник

AS

Anton Smetanin in Unity Floodилка
John Dow
а разве гарбич коллектор их не удаляет в какой-то момент ?
Нет, он удаляет только то, что в хипе выделялось
источник

мм

макс максов... in Unity Floodилка
Anton Smetanin
Они просто переписываются новыми значениями, когда какая-то другая функция использует этот участок памяти
А как определяется когда надо переписать значения
источник

AS

Anton Smetanin in Unity Floodилка
макс максов
А как определяется когда надо переписать значения
Ну я выше описал пример
источник

мм

макс максов... in Unity Floodилка
А все
источник

мм

макс максов... in Unity Floodилка
Понял
источник

AS

Anton Smetanin in Unity Floodилка
Когда вторая функция вызывается непосредственно после первой, она использует тот же кусок стека
источник

мм

макс максов... in Unity Floodилка
Терпеть ясно ) збс спасибо
источник

P

Phantom in Unity Floodилка
Леха (Felix)
Чистый асинк не пробовал, но что-то мне не очень хочется выставлять задержку thread.Sleep(ом)  но думаю там не должно быть таких проблем. Как я уже понял, время уходит на то, чтобы вернуть управление после ожидания, так-как оно дожидается следующего фрейма
А причем тут Thread.Sleep?
источник

P

Phantom in Unity Floodилка
Леха (Felix)
Ну буду экспериментировать пока самый действенный способ это отнимать 0.01секунду каждый раз после waitForSeconds, для моего случая 0.01 это примерное время задержки во всех вызываемых yield return WaitForSeconds
Это плохая идея
источник