@daniil14056

Как можно инициализировать структуру в прямо в массиве в safe коде c#?

Почему вообще по дефолту такой код
User[] users=new User[100];
     users[1]=new User(1,2);

Сначала создает структуру на стеке, потом копирует ее в массив.
То есть происходит лишние выделение на стеке память. Тогда как можно сразу в массиве записать.
Можно ли так сделать?
User*user=(User*)Native.Alloc(100*Marhsal.Sizeof<User>());

Но такая запись лишает конструктор, и вообще хотелось бы в безопасном коде работать.
  • Вопрос задан
  • 74 просмотра
Решения вопроса 2
vabka
@vabka Куратор тега C#
Токсичный шарпист

То есть происходит лишние выделение на стеке память.

Это на столько мизерное выделение, что я даже хз.

Вообще структуры в массиве изначально уже созданы, но проинициализированы нулями - ты можешь сразу начать вызывать какие-то методы у них (которые, например, проинициализируют их)
Ответ написан
Комментировать
yarosroman
@yarosroman Куратор тега C#
C# the best
Память на стеке, выделяется всего одной ассемблерной инструкцией и память выделяется сразу на весь метод, под все локальные переменные,
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
AshBlade
@AshBlade Куратор тега C#
Просто хочу быть счастливым
Сначала создает структуру на стеке, потом копирует ее в массив.


Потому что сначала создается временная переменная с new User(1, 2), а потом она записывается в массив.

Можно ли так сделать?


Про так не знаю, но ты можешь использовать users.Initialize(). Он вызовет стандартный конструктор (без параметров) для всех элементов, а потом вручную выставить значения в цикле
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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