powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Generic List of structs
16 сообщений из 41, страница 2 из 2
Generic List of structs
    #39287176
ProBiotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для меня боксинг это когда value type оказывается в куче. Вот и все ) По моему вполне простое описание, по моему оно верное.
...
Рейтинг: 0 / 0
Generic List of structs
    #39287182
ProBiotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степив принципе можно освежить память
struct A{};
A* array= (A *) malloc(sizeof(A) * 2)
A** array_ref= (A **) malloc(sizeof(A*) * 2);

Не понимаю в чем тут подвох. Ну указатель на массив. Ну указатель на указатель. На С++ никогда не писал особо, теорию знаю но всякие такие тонкости уже нет.
...
Рейтинг: 0 / 0
Generic List of structs
    #39287184
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ProBiotek,
да это не для вас.
для вас вот это https://msdn.microsoft.com/ru-ru/library/yz2be5wk.aspx
...
Рейтинг: 0 / 0
Generic List of structs
    #39287187
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ProBiotekПо моему вполне простое описание, по моему оно верное.
увы - ошибочное
...
Рейтинг: 0 / 0
Generic List of structs
    #39287188
ProBiotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степи,

В статье ничего не сказано про вложенность. Из статьи не ясно что происходит с массивом value type внутри структуры. От того и вопросы. Поэтому и есть у меня этот пробел видимо.
...
Рейтинг: 0 / 0
Generic List of structs
    #39287191
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ProBiotek,
))))) за сим откланяюсь..
...
Рейтинг: 0 / 0
Generic List of structs
    #39287201
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степиProBiotek,
да это не для вас.
для вас вот это https://msdn.microsoft.com/ru-ru/library/yz2be5wk.aspx
Почитал и похоже понял ответ на вопрос
ProBiotekХотите сказать, что рекламная фраза "generic list для value type хороши именно тем, что не боксируют эти value type" ложь ?
"не боксируют" не синоним "размещают на стэке". В куче размещается массив, но элементы массива не требуют упаковки, поэтому данное утверждение верно.

Если правильно понял, то основные тормоза при упаковке (нездоровый запутывающий термин), которая сводится к выделению места в куче и копированию туда. Распаковка проще, просто копирование обратно в стэк. Но в случае с массивом - в куче создается объект массив, а под его элементы никаких доп. выделений памяти не нужно.
...
Рейтинг: 0 / 0
Generic List of structs
    #39287204
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
class Program
{
  static void Main()
  {
    var a = new object[1];
    a[0] = 0;
  }
}


компилируется вот в такой IL-код:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
.method private hidebysig static void Main () cil managed 
{
  .entrypoint
  .locals init (
    [0] object[] a
  )

  IL_0000: ldc.i4.1
  IL_0001: newarr [mscorlib]System.Object
  IL_0006: stloc.0
  IL_0007: ldloc.0
  IL_0008: ldc.i4.0
  IL_0009: ldc.i4.0
  IL_000a: box [mscorlib]System.Int32
  IL_000f: stelem.ref
  IL_0010: ret
}


а
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
class Program
{
  static void Main()
  {
    var a = new int[1];
    a[0] = 0;
  }
}


вот в такой:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
.method private hidebysig static void Main () cil managed 
{
  .entrypoint
  .locals init (
    [0] int32[] a
  )

  IL_0000: ldc.i4.1
  IL_0001: newarr [mscorlib]System.Int32
  IL_0006: stloc.0
  IL_0007: ldloc.0
  IL_0008: ldc.i4.0
  IL_0009: ldc.i4.0
  IL_000a: stelem.i4
  IL_000b: ret
}


В первом случае имеет место быть боксинг - имеется инструкция box + инструкция stelem.ref (сохранение в массиве ссылки из стека). Во втором случае нет боксинга - соответственно, нет инструкции box, и вместо stelem.ref имеем stelem.i4 (сохранение в массиве int32-значения из стека).
...
Рейтинг: 0 / 0
Generic List of structs
    #39287212
ProBiotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ок. Спасибо. По разбираюсь еще.
Я для себя боксинг осознал так, вот и все. Жизнь не портит сильно, т.к. сверх оптимизацией микросекунд заниматься не приходится и структуры вообще не практикую особо. Как говорят ASP.NET Life Cycle настолько длительный что на его фоне все эти оптимизации с боксингом погоды никак не делают.

Век живи, век задавай вопросы !
...
Рейтинг: 0 / 0
Generic List of structs
    #39287225
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,
верно, давай представим (массив структур, у стр. есть первое поле int a, второе int b)
нужно прочитать у пятого элемента поле b
go ... уходим по адресной арифметике от начала массива в право на пять, берем указатель делаем смещение на четыре ( перескочить int a, и читаем 4 байта за ним - это и будет int b.
а теперь представь, что было бы если там лежала на живая структура, а указатель на нее , а сама она находилась бы в другом месте памяти?
...
Рейтинг: 0 / 0
Generic List of structs
    #39287232
ProBiotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степи,

удобно да.
...
Рейтинг: 0 / 0
Generic List of structs
    #39287238
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а теперь представим, что зл..й уборщик мусора дефрагментировал разряженную кучу, все адреса пер...блись, а у нас в массиве
лежат адреса старые, что он будет делать? кончено менять на новые, а нах ему это надо, а тупой проггер заставил его...
...
Рейтинг: 0 / 0
Generic List of structs
    #39287292
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилоткуда этот бред?

дальше даже читать неинтересно
Сколько в граммах будет весить объекта класса в момент исполнения?
Код: c#
1.
2.
3.
  public class Изопропил : System.Windows.Forms.Form
    {
    }
...
Рейтинг: 0 / 0
Generic List of structs
    #39287373
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВИзопропилоткуда этот бред?

дальше даже читать неинтересно
Сколько в граммах будет весить объекта класса в момент исполнения?
Код: c#
1.
2.
3.
  public class Изопропил : System.Windows.Forms.Form
    {
    }


Код: c#
1.
int sz = Marshal.SizeOf<Изопропил>();



почему только в момент исполнения? так же как и в случае структур, IntPtr может иметь разный размер в x86/x64
реальные размеры вычисляются при загрузке метаданных класса/структуры
...
Рейтинг: 0 / 0
Generic List of structs
    #39287426
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилЕвгенийВпропущено...

Сколько в граммах будет весить объекта класса в момент исполнения?
Код: c#
1.
2.
3.
  public class Изопропил : System.Windows.Forms.Form
    {
    }


Код: c#
1.
int sz = Marshal.SizeOf<Изопропил>();



почему только в момент исполнения? так же как и в случае структур, 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()
...
Рейтинг: 0 / 0
Generic List of structs
    #39287427
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВ,
А если class заменить на struct, то работает.
...
Рейтинг: 0 / 0
16 сообщений из 41, страница 2 из 2
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Generic List of structs
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]