|
Generic List of structs
|
|||
---|---|---|---|
#18+
Для меня боксинг это когда value type оказывается в куче. Вот и все ) По моему вполне простое описание, по моему оно верное. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2016, 13:47 |
|
Generic List of structs
|
|||
---|---|---|---|
#18+
Где-то в степив принципе можно освежить память struct A{}; A* array= (A *) malloc(sizeof(A) * 2) A** array_ref= (A **) malloc(sizeof(A*) * 2); Не понимаю в чем тут подвох. Ну указатель на массив. Ну указатель на указатель. На С++ никогда не писал особо, теорию знаю но всякие такие тонкости уже нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2016, 13:51 |
|
Generic List of structs
|
|||
---|---|---|---|
#18+
ProBiotek, да это не для вас. для вас вот это https://msdn.microsoft.com/ru-ru/library/yz2be5wk.aspx ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2016, 13:54 |
|
Generic List of structs
|
|||
---|---|---|---|
#18+
ProBiotekПо моему вполне простое описание, по моему оно верное. увы - ошибочное ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2016, 13:58 |
|
Generic List of structs
|
|||
---|---|---|---|
#18+
Где-то в степи, В статье ничего не сказано про вложенность. Из статьи не ясно что происходит с массивом value type внутри структуры. От того и вопросы. Поэтому и есть у меня этот пробел видимо. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2016, 13:59 |
|
Generic List of structs
|
|||
---|---|---|---|
#18+
ProBiotek, ))))) за сим откланяюсь.. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2016, 14:01 |
|
Generic List of structs
|
|||
---|---|---|---|
#18+
Где-то в степиProBiotek, да это не для вас. для вас вот это https://msdn.microsoft.com/ru-ru/library/yz2be5wk.aspx Почитал и похоже понял ответ на вопрос ProBiotekХотите сказать, что рекламная фраза "generic list для value type хороши именно тем, что не боксируют эти value type" ложь ? "не боксируют" не синоним "размещают на стэке". В куче размещается массив, но элементы массива не требуют упаковки, поэтому данное утверждение верно. Если правильно понял, то основные тормоза при упаковке (нездоровый запутывающий термин), которая сводится к выделению места в куче и копированию туда. Распаковка проще, просто копирование обратно в стэк. Но в случае с массивом - в куче создается объект массив, а под его элементы никаких доп. выделений памяти не нужно. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2016, 14:07 |
|
Generic List of structs
|
|||
---|---|---|---|
#18+
ProBiotekДля меня боксинг это когда value type оказывается в куче. Вот и все ) По моему вполне простое описание, по моему оно верное. Кое-кто считает иначе: J. Richter CLR via C# Chapter 5 Primitive, Reference, And Value Types It’s possible to convert a value type to a reference type by using a mechanism called boxing. Internally, here’s what happens when an instance of a value type is boxed: 1. Memory is allocated from the managed heap. The amount of memory allocated is the size required by the value type’s fields plus the two additional overhead members (the type object pointer and the sync block index) required by all objects on the managed heap. 2. The value type’s fields are copied to the newly allocated heap memory. 3. The address of the object is returned. This address is now a reference to an object; the value type is now a reference type. - не доводилось читать? Или вот: Boxing is an implicit conversion of a value type to the type object or to any interface type implemented by this value type. - https://msdn.microsoft.com/en-us/library/yz2be5wk.aspx Всё вышеописанное несколько больше, чем просто хранение неких значений в куче. Ну, и наконец: Код: c# 1. 2. 3. 4. 5. 6. 7. 8.
компилируется вот в такой IL-код: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
а Код: c# 1. 2. 3. 4. 5. 6. 7. 8.
вот в такой: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
В первом случае имеет место быть боксинг - имеется инструкция box + инструкция stelem.ref (сохранение в массиве ссылки из стека). Во втором случае нет боксинга - соответственно, нет инструкции box, и вместо stelem.ref имеем stelem.i4 (сохранение в массиве int32-значения из стека). ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2016, 14:09 |
|
Generic List of structs
|
|||
---|---|---|---|
#18+
Ок. Спасибо. По разбираюсь еще. Я для себя боксинг осознал так, вот и все. Жизнь не портит сильно, т.к. сверх оптимизацией микросекунд заниматься не приходится и структуры вообще не практикую особо. Как говорят ASP.NET Life Cycle настолько длительный что на его фоне все эти оптимизации с боксингом погоды никак не делают. Век живи, век задавай вопросы ! ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2016, 14:17 |
|
Generic List of structs
|
|||
---|---|---|---|
#18+
Dima T, верно, давай представим (массив структур, у стр. есть первое поле int a, второе int b) нужно прочитать у пятого элемента поле b go ... уходим по адресной арифметике от начала массива в право на пять, берем указатель делаем смещение на четыре ( перескочить int a, и читаем 4 байта за ним - это и будет int b. а теперь представь, что было бы если там лежала на живая структура, а указатель на нее , а сама она находилась бы в другом месте памяти? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2016, 14:25 |
|
Generic List of structs
|
|||
---|---|---|---|
#18+
Где-то в степи, удобно да. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2016, 14:32 |
|
Generic List of structs
|
|||
---|---|---|---|
#18+
а теперь представим, что зл..й уборщик мусора дефрагментировал разряженную кучу, все адреса пер...блись, а у нас в массиве лежат адреса старые, что он будет делать? кончено менять на новые, а нах ему это надо, а тупой проггер заставил его... ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2016, 14:36 |
|
Generic List of structs
|
|||
---|---|---|---|
#18+
Изопропилоткуда этот бред? дальше даже читать неинтересно Сколько в граммах будет весить объекта класса в момент исполнения? Код: c# 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2016, 15:12 |
|
Generic List of structs
|
|||
---|---|---|---|
#18+
ЕвгенийВИзопропилоткуда этот бред? дальше даже читать неинтересно Сколько в граммах будет весить объекта класса в момент исполнения? Код: c# 1. 2. 3.
Код: c# 1.
почему только в момент исполнения? так же как и в случае структур, IntPtr может иметь разный размер в x86/x64 реальные размеры вычисляются при загрузке метаданных класса/структуры ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2016, 16:19 |
|
Generic List of structs
|
|||
---|---|---|---|
#18+
ИзопропилЕвгенийВпропущено... Сколько в граммах будет весить объекта класса в момент исполнения? Код: c# 1. 2. 3.
Код: c# 1.
почему только в момент исполнения? так же как и в случае структур, IntPtr может иметь разный размер в x86/x64 реальные размеры вычисляются при загрузке метаданных класса/структуры авторНевозможно упаковать тип "ConsoleApplication3.Изопропил" как неуправляемую структуру; невозможно вычислить размер или смещение, имеющие смысл. в System.Runtime.InteropServices.Marshal.SizeOfHelper(Type t, Boolean throwIfNotMarshalable) в System.Runtime.InteropServices.Marshal.SizeOf(Type t) в System.Runtime.InteropServices.Marshal.SizeOf[T]() в ConsoleApplication3.MainApp.Main() в D:\EvProjects\My\ConsoleApplication1\ConsoleApplication3\Program.cs:строка 18 в System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args) в System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) в Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() в System.Threading.ThreadHelper.ThreadStart_Context(Object state) в System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) в System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) в System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) в System.Threading.ThreadHelper.ThreadStart() ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2016, 17:03 |
|
|
start [/forum/topic.php?fid=20&gotonew=1&tid=1400412]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
45ms |
get topic data: |
8ms |
get first new msg: |
7ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
others: | 291ms |
total: | 433ms |
0 / 0 |