169 похожих чатов

Вітаю, питання по ref type і value type. Якщо в нас

є клас Person:

class Person // клас - це ref type
{
public int Id { get; set; } // Int в нас value type
}

але ж через те, що INT в нас знаходиться в класі, то він все рівно розташований в кучі.

В мене є думка (чисто суб'єктивна і не підтверджена). Стек і куча поділені таким чином, що стек - зручний у швидкодоступності і туди засовують легкі дані, а куча - для розміщення більших даних. Класи - це в нас складний тип даних, тому його визначено розміщувати у кучі. І суто ТЕОРЕТИЧНО, ми могли б його і в стек засунути, але ми цього не робимо (чи CLR), бо в стека інші функції. І якщо, в нас умовно струкура, то вона засовується в стек, а якщо клас - то в кучу.

До чого я дійшов з цією думкою. Що int в класі може зберігатися в кучі і він не обов'язково має бути в стеку. Бо що стек, що куча - це область в пам'яті. Просто за допомогою CLR воно поділена під певні функції.

❓Питання відносно приклада описаного вище:
1) Як int в середині класа розташовується в кучі, якщо value type маює розташовуватися в стеку?
2) Чи можна вважати, що тут відбувається boxing?
3) Навряд мої думки коректні, стосовно визначення в пам'яті даних. Що я кажу не вірно?
4) Чи є якісь джерела, щоб почитати про те, як розташовується в пам'яті int, який знаходиться в класі?

20 ответов

26 просмотров

Питання ти C чи С++ знаеш?

1. Boxing 2. Так 3. Стек не існує сам по собі (можу помилятися), він існує в контексті виконання функції. А от куча існує сама по собі

4. CLR via C# книжка в цьому плані класика, але вона досить сумбурна і я хз чи оновлювалася вона на дотнет кор

Andrew
4. CLR via C# книжка в цьому плані класика, але во...

А принципово нічого майже не змінилося. Окрім CAS та AppDomain

А GAC?

Andrew
4. CLR via C# книжка в цьому плані класика, але во...

доєднаюсь до Андрія, більшість інформації в ній актуальна, з плюсовим бекграундом дуже добре повинна піти

Andrew
А GAC?

Ну також. Але це не складно доволі. Strong naming майже не актуальні зараз

Ще на співбесідах люблять питати різні едж кейси, чк от що буде якщо структуру яка ісплементує інтерфейс привести до цього інтерфейса явно та чому

Ярослав-(Стрикущ🌿) Автор вопроса
Andrew
Ще на співбесідах люблять питати різні едж кейси, ...

до речі - воно все це взагалі не допомагає код писати в більшості компаній, хіба що збільшує страждання та знижує толерантність до передчасних абстракцій

Ярослав (Стрикущ🌿)
1) але в IL коді не пише про boxing

Boxing лише коли ти структури до object конвертуєш

Arseniy
до речі - воно все це взагалі не допомагає код пис...

Це правда, але приклад цікавий і не дуже складний, є більш задрочені питання

Andrii Kurdiumov
Boxing лише коли ти структури до object конвертуєш

Тоді я здається некоректно відповів про боксінг у випадку коли структура це поле у класі

Andrew
Тоді я здається некоректно відповів про боксінг у ...

Ну там про value type на стеку це солодка не правда для спрощення. Через це описувати боксінг доводиться через огороди

Andrew
1. Boxing 2. Так 3. Стек не існує сам по собі (мож...

Доповню відповідь номер 3 Стек у кожного thread окремий Там зберігається контекст виконання цього потоку Включно з локальними змінними та параметрами метода, що зараз викликаний Оскільки клас як сутність може одночасно бути використаний з декількох потоків – він ніяк не може лежати на стеку (як і його глобальні змінні, незалежно від ref/value type) І саме по цій причині будь-який навіть потенційний шанс виконання коду в іншому від поточного потоці викликає boxing (як приклад такої операції – delegate variable capturing) @yarikko

Vova Lantsov 🇺🇦
Доповню відповідь номер 3 Стек у кожного thread о...

Я якраз вчора займався адаптацією блазорного рантайму до реалій threads + call stacks для юай дебагера

1) інлайниться в пам'ять класу 2) ніт 3) стек для даних фіксованого розміру (здебільшості, не дивлячись на всякі VLA) 4) статті в інетіку є, тей же https://learn.microsoft.com/en-us/archive/msdn-magazine/2005/may/net-framework-internals-how-the-clr-creates-runtime-objects

Ярослав-(Стрикущ🌿) Автор вопроса

сарказм чи внатурі?)

Ярослав (Стрикущ🌿)
сарказм чи внатурі?)

внатурі, я починав перекладати але потім поклав

Похожие вопросы

Обсуждают сегодня

а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
Добрый день. Хочу сделать отрисовку по команде на панели. Почему-то рисуется только при втором вызове. С чем может быть связано, не подскажете? procedure TForm1.FormDblClick(...
Kirill Filippenok
20
Всем доброго дня! Подскажите может кто использовал связку Pagebuilder + Clientsetting. Сами параметры с типом pagebuilder в модуле Clientsetting работают нормально, можно такж...
Александр Добриков
12
А почему в си некоторые вещи работают с двойными кавычками некоторые с одинарными? Нельзя было все сделать с одними или чтоб работало с разными? например чтоб выводить строки ...
.
15
Всем привет! Нужен совет от опытных. Переношу свой проект с Делфи 10.2 Токио на Лазарус 3.2 установленный через инсталлятор fpcupdeluxe-x86_64-win64. При импортировании проект...
Дмитрий Завгородний
7
Всем привет! Подскажите. Я написал приложение на Delphi 10.2 Tokyo под Windows 10. И передо мной стал вопрос о том чтобы сделать это приложение кроссплатформенным (под Linux и...
Дмитрий Завгородний
24
Good afternoon, I just started learning php in conjunction with mysql. I am registering a system on a local Mamp server using phpMyAdmin. It seems to be stored normally in the...
ManGo
1
Эх кто-то пришел и весь праздник испортил :( You need complex FBX scene importing setup to change things on import? good luck with that. You need navigation and pathfinding? g...
Serg Gini
5
Добрый день! Такая проблема возникла, написал код на Python, который компилирует, собирает и запускает файлы .s А в случае работы нужно то же самое делать для .asm Чем эти фа...
A Mori
5
Всем привет! procedure TForm1.FormCreate(Sender: TObject); type TStartEnd = record S: Byte; E: Byte; end; var a, b: TStartEnd; begin {1} a.S := 1; {2} a.E := 2; ...
Руслан Михайлович
10
Карта сайта