Comments 15
Имхо, вы забыли ответить на главный вопрос — нафига? Все-таки смысл с# именно в управлении памятью системой…
+5
Для фана, полагаю. ИМХО, практически единственная ситуация, где такое могло бы быть полезно на практике — это оптимизировать какой-то критичный локальный участок в уже существующем продукте. Да и то проще уже тогда на нативный код переписать, чем использовать такой ад, который может сломаться от чиха в любой момент…
+2
Для скорости роста бороды, конечно)
Чтобы чувствовать себя совсем крутым дядькой, который знает как оно там внутри на самом деле устроено.
Кругозор, общая эрудиция и все такое…
Чтобы чувствовать себя совсем крутым дядькой, который знает как оно там внутри на самом деле устроено.
Кругозор, общая эрудиция и все такое…
0
Во-первых для фана. Второе — мне просто приятно знать, как что устроено. И вовсе не для «борды», как написал оратор выше. Вам же наверняка стало также интересно. Вот и мне было интересно, когда копался в этом =)
0
А по этому адресу мы берем указатель на нужный метод и вызываем его. Значит чтобы любой участок памяти представить как объект определенного типа необходимо просто записать указатель на таблицу виртуальных методов.Прямо-таки и необходимо? Это нужно только для виртуальных методов, обычные же методы вызываются напрямую, не задействуя таблицу виртуальных методов вообще никак.
0
Обычно для вызова методов используется callvirt. Где-то читал, что они этим сэкономили на явной проверке валидности указателя, так как callvirt проверяет и босает NullReference если надо
0
Если метод — не виртуальный, то callvirt будет преобразован в обычный call на этапе оптимизации, разве нет?
0
Сам компилятор C# генерирует callvirt. Сомневаюсь, что они будут сами с собой спорить.
Вот объяснение этой штуки: blogs.msdn.com/b/ericgu/archive/2008/07/02/why-does-c-always-use-callvirt.aspx
Вот объяснение этой штуки: blogs.msdn.com/b/ericgu/archive/2008/07/02/why-does-c-always-use-callvirt.aspx
0
А компилятор оптимизацией и не занимается, это задача JIT.
0
Нет. call для статических методов, остальные через callvirt. Выше верно сказали про проверку на null
0
Вы не пробовали создать делегат на конструктор?
0
Охренеть, круто!
+1
При каких условиях ваш код перестанет работать?
0
Sign up to leave a comment.
Продолжаем кромсать CLR: пул объектов .Net вне куч SOH/LOH