Как стать автором
Обновить
  • по релевантности
  • по времени
  • по рейтингу

Не уважаю инкапсуляцию, или использование таблицы методов другого типа для быстрого вызова приватных методов

Высокая производительностьНенормальное программирование.NETC#ООП
Из песочницы
Всем привет. Хотелось бы поделиться примером использования StructLayout для чего-то более интересного, чем примеры с байтами, интами и прочими цифрами, в которых все происходит чуть более, чем ожидаемо.
Читать дальше →
Всего голосов 15: ↑15 и ↓0+15
Просмотры12K
Комментарии 15

Пропихиваем параметры в небезопасные операции в безопасном коде

Ненормальное программирование.NETПроектирование и рефакторингC#ООП
Всем привет. В этот раз продолжаем смеяться над нормальным вызовом методов. Предлагаю ознакомится с вызовом метода с параметрами без передачи параметров. Также попробуем преобразовать ссылочный тип в число — его адрес, без использования указателей и unsafe кода.
Читать дальше →
Всего голосов 16: ↑16 и ↓0+16
Просмотры5.4K
Комментарии 8

Что происходит за кулисами С#: основы работы со стеком

Ненормальное программирование.NETAssemblerC#ООП
Предлагаю посмотреть все то, что стоит за простыми строками инициализации объектов, вызова методов и передачи параметров. Ну и, разумеется, использование этих сведений на практике — вычитывание стека вызывающего метода.

Дисклеймер


Прежде, чем приступить к повествованию, настоятельно рекомендую ознакомиться с первым постом про StructLayout, т.к. там разобран пример, который будет использоваться в этой статье.

Весь код, кроющийся за высокоуровневым, представлен для режима отладки, именно он показывают концептуальную основу. Также все изложенное рассмотрено для 32 битной платформы. JIT оптимизации — это отдельная и большая тема, которая здесь рассматриваться не будет.

Также хотелось бы предупредить, что данная статья не содержит материал, который стоит применять в реальных проектах.

Начинаем с теории


Любой код в конечном итоге становится набором машинных комманд. Наиболее понятно их представление в виде инструкций языка Ассемблера, прямо соответсвующих одной (или нескольким) машинным инструкциям.

Читать дальше →
Всего голосов 22: ↑22 и ↓0+22
Просмотры11K
Комментарии 11

How to push parameters into methods without parameters in safe code

.NETAssemblerC#
Перевод
Hello. This time we continue to laugh at the normal method call. I propose to get acquainted with the method call with parameters without passing parameters. We will also try to convert the reference type to a number — its address, without using pointers and unsafe code.

Read more →
Всего голосов 14: ↑13 и ↓1+12
Просмотры4.7K
Комментарии 0

What happens behind the scenes C#: the basics of working with the stack

.NETAssemblerC#
Перевод
I propose to look at the internals that are behind the simple lines of initializing of the objects, calling methods, and passing parameters. And, of course, we will use this information in practice — we will subtract the stack of the calling method.

Disclaimer


Before proceeding with the story, I strongly recommend you to read the first post about StructLayout, there is an example that will be used in this article.

All code behind the high-level one is presented for the debug mode, because it shows the conceptual basis. JIT optimization is a separate big topic that will not be covered here.

I would also like to warn that this article does not contain material that should be used in real projects.

First — theory


Any code eventually becomes a set of machine commands. Most understandable is their representation in the form of Assembly language instructions that directly correspond to one (or several) machine instructions.

Read more →
Всего голосов 11: ↑10 и ↓1+9
Просмотры5.5K
Комментарии 0

Breaking down the fundamentals of C #: allocating memory for a reference type on the stack

.NETC#
Перевод
This article will show you the basics of types internals, as of course an example in which the memory for the reference type will be allocated completely on the stack (this is because I am a full-stack programmer).



Disclaimer


This article does not contain material that should be used in real projects. It is simply an extension of the boundaries in which a programming language is perceived.

Before proceeding with the story, I strongly recommend you to read the first post about StructLayout, because there is an example that will be used in this article (However, as always).
Read more →
Всего голосов 7: ↑6 и ↓1+5
Просмотры5K
Комментарии 0