Luffy1
@Luffy1
Student, Junior .NET programmer, C#, JS, HTML/CSS

Может ли быть переход объекта от SOH to LOH и наоборот? Если да, то какие процессы в это время происходят? Простой переход или что-нибудь ещё?

Может ли быть переход объекта от SOH to LOH и наоборот? Если да, то какие процессы в это время происходят? Простой переход или что-нибудь ещё?
  • Вопрос задан
  • 78 просмотров
Решения вопроса 1
ayazer
@ayazer
Sr. Software Engineer
нет, не может

upd:
не нужно путать общий размер занимаемой памяти и размер объекта. В loh попадет условный массив на 100мб/ большая строка. Но объект который ссылается на это - нет, т.к. в нем будет только ссылка весом в пару байт.

подозреваю что вы думали о чем-то таком

public class TestClass
    {
        public byte[] Bytes;

        public TestClass(byte[] bytes)
        {
            Bytes = bytes;
        }

        public void Upd()
        {
            Bytes = new byte[101 * 1024 * 1024];
        }
    }

...

    static void Main(string[] args)
    {
        var data = new TestClass[3];

        for (int i = 0; i < 3; i++)
        {
            data[i] = new TestClass(new byte[1]);
        }

        data[1].Upd();
    }


но нет, это не заставит переиестить объект с soh -> loh, т.к. в loh попадет только массив, а в объекте будет просто ссылка. И если заглянуть в память - это видно

5f23ca2621fda807535079.png
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы