unmanaged - jug ru grouppublic.jugru.org/dotnext/2014/piter/sidristy-unmanaged.pdfФлаги...

16
UNMANAGED .NET СТАНИСЛАВ СИДРИСТЫЙ [email protected] Luxoft.com @sidristij

Upload: others

Post on 24-Jul-2020

15 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: UNMANAGED - JUG Ru Grouppublic.jugru.org/dotnext/2014/piter/sidristy-unmanaged.pdfФлаги Размер Instance Доп флаги Количество методов Количество

UNMANAGED .NET

СТАНИСЛАВ СИДРИСТЫЙ [email protected]

Luxoft.com @sidristij

Page 2: UNMANAGED - JUG Ru Grouppublic.jugru.org/dotnext/2014/piter/sidristy-unmanaged.pdfФлаги Размер Instance Доп флаги Количество методов Количество

www.luxoft.com

ЦЕЛИ ДОКЛАДА

Теоретическая часть • Вспомнить Рихтера и red-gate добрым словом, вспомним базовые знания по памяти в .Net • Рассмотрим модель типов .Net и поддержку наследования Практическая часть • Достанем скрытые структуры CLI тремя способами, без использования рефлексии • Пробросим object в другой AppDomain • Построим свой ObjectPool вне .Net памяти • Соберем в памяти все .Net объекты

Сделать выводы

Page 3: UNMANAGED - JUG Ru Grouppublic.jugru.org/dotnext/2014/piter/sidristy-unmanaged.pdfФлаги Размер Instance Доп флаги Количество методов Количество

www.luxoft.com

БАЗОВЫЕ ПРЕДСТАВЛЕИЯ О ПАМЯТИ .NET

Page 4: UNMANAGED - JUG Ru Grouppublic.jugru.org/dotnext/2014/piter/sidristy-unmanaged.pdfФлаги Размер Instance Доп флаги Количество методов Количество

www.luxoft.com

БАЗОВЫЕ ЗНАНИЯ

Области памяти: § Есть стек потока – он для работы методов § Есть SOH – он для «маленьких» объектов (<85000B) § Есть LOH – он для «больших» объектов § Есть Code Heap – там размещаются результаты JIT компиляции § Есть также High Frequency Heap – содержит структуры поддержки системы типов, к которым идет частое обращение (MethodTable, VTable) § Есть еще Low Frequency Heap – содержит редкоиспользуемые структуры поддержки системы типов § Stub Heap – содержит заглушки для COM Interop, p/invoke

Page 5: UNMANAGED - JUG Ru Grouppublic.jugru.org/dotnext/2014/piter/sidristy-unmanaged.pdfФлаги Размер Instance Доп флаги Количество методов Количество

www.luxoft.com

Stack потока: § Предназначен для хранения параметров методов и хранения адреса возврата из метода для каждого вызова метода § Соответственно, при вызове метода, в стеке выделяется фрейм, в который перед вызовом складываются все параметры (включая this для instance методов) и адрес возврата (адрес сл. инструкции: на кот. должен перейти ret)

Managed Heaps: § Размещаются все экземпляры классов и value types в качестве их полей § В зависимости от размера уходят либо в SOH, либо в LOH § Управляются механизмом Garbage Collector, который работает по-разному для SOH/LOH

НЕМНОГО ПОПОДРОБНЕЕ

Page 6: UNMANAGED - JUG Ru Grouppublic.jugru.org/dotnext/2014/piter/sidristy-unmanaged.pdfФлаги Размер Instance Доп флаги Количество методов Количество

www.luxoft.com

Card Table: § Битовая карта, каждый бит которой отражает измененное состояние поля класса, которое попало в диапазон байт, за который этот бит отвечает § Диапазон байт равен 4К § При проходе по полям, GC проходит в поле если Gen поля ниже, либо выше, но содержит установленные биты

Ephemeral Segments: § Сегменты – это группы страниц памяти, внутри которых размещаются кучи § SOH куча, имеющая несколько сегментов, размещает Gen0 и Gen1 в последнем выделенном сегменте, а все остальные сегменты занимает Gen2

И ЕЩЕ НЕМНОГО ПОПОДРОБНЕЕ

Page 7: UNMANAGED - JUG Ru Grouppublic.jugru.org/dotnext/2014/piter/sidristy-unmanaged.pdfФлаги Размер Instance Доп флаги Количество методов Количество

www.luxoft.com

ПАМЯТЬ ПРОЦЕССОВ - ВИРТУАЛЬНАЯ

§  Это значит что доступное адресное пространство – не RAM §  Часть – на диске, часть – в RAM §  Доступность не линейная, а «островками» с настройками прав доступа

§  Нет понятия AppDomain – значит нет ограничения доступа между ними

§  А при наличии прав, можно снять память чужого процесса

Page 8: UNMANAGED - JUG Ru Grouppublic.jugru.org/dotnext/2014/piter/sidristy-unmanaged.pdfФлаги Размер Instance Доп флаги Количество методов Количество

www.luxoft.com

Структура типов данных

Sync Block Index

Methods Table Nothing

Обязательная часть

Sync Block Index

Methods Table

Обязательная часть

Boxed Data

Obj

ect

Box

ed

Valu

eTyp

e

Sync Block Index

Methods Table

Обязательная часть

Class Data

Any

R

efTy

pe

Page 9: UNMANAGED - JUG Ru Grouppublic.jugru.org/dotnext/2014/piter/sidristy-unmanaged.pdfФлаги Размер Instance Доп флаги Количество методов Количество

www.luxoft.com

Структура типов данных

Длина

Sync Block Index

Methods Table Len

Обязательная часть

Data

Строка

Strin

g 3.

5-

nil

Длина

Sync Block Index

Methods Table Len

Обязательная часть

Data

Строка

Strin

g 4.

0+

nil

Array Len

Размер массива

Page 10: UNMANAGED - JUG Ru Grouppublic.jugru.org/dotnext/2014/piter/sidristy-unmanaged.pdfФлаги Размер Instance Доп флаги Количество методов Количество

www.luxoft.com

Структура типов данных

Sync Block Index

Methods Table Len

Обязательная часть

Data

Длина Данные

Arr

ay1 o

f Va

lueT

ypes

A

rray

N o

f Va

lueT

ypes

Длина и стартовый индекс измерения

Sync Block Index

Methods Table L1

Обязательная часть

S1 L2 Data S2 nil

Данные

Methods Table

(items)

Arr

ayN o

f R

efTy

pes

Sync Block Index

Methods Table L1

Обязательная часть

S1 L2 Data S2 nil

Длина и стартовый индекс измерения

Данные

Page 11: UNMANAGED - JUG Ru Grouppublic.jugru.org/dotnext/2014/piter/sidristy-unmanaged.pdfФлаги Размер Instance Доп флаги Количество методов Количество

www.luxoft.com

Pointers To MethodDefs and InterfaceDefs

Структура типов данных

Sync Block Index

Methods Table Nothing

Obj

ect

Флаги

Размер Instance

Доп флаги

Количество методов

Количество вирт методов

Количество интерфейсов

MethodTable базового типа

EEModule

EEClass

Флаги

Размер Instance

Доп флаги

Количество методов

Количество вирт методов

Количество интерфейсов

MethodTable базового типа

EEModule

EEClass

Pointers To MethodDefs and InterfaceDefs

High Frequency Heap SOH / LOH

Page 12: UNMANAGED - JUG Ru Grouppublic.jugru.org/dotnext/2014/piter/sidristy-unmanaged.pdfФлаги Размер Instance Доп флаги Количество методов Количество

www.luxoft.com

Структура типов данных

Header

GetHashCode

ToString

GetValue

Header

GetHashCode

ToString

GetValue

MethodBody

MethodBody

MethodBody

MethodBody

MyBaseClass MyDerivedClass

Page 13: UNMANAGED - JUG Ru Grouppublic.jugru.org/dotnext/2014/piter/sidristy-unmanaged.pdfФлаги Размер Instance Доп флаги Количество методов Количество

www.luxoft.com

Структура типов данных

Header

GetHashCode

ToString

GetValue

Header

GetHashCode

ToString

GetValue

MethodBody

MethodBody

MethodBody

MethodBody

MyBaseClass MyDerivedClass

Sync Block Index

Method Table Data

Page 14: UNMANAGED - JUG Ru Grouppublic.jugru.org/dotnext/2014/piter/sidristy-unmanaged.pdfФлаги Размер Instance Доп флаги Количество методов Количество

www.luxoft.com

ПРИМЕРЫ КОДА

Page 15: UNMANAGED - JUG Ru Grouppublic.jugru.org/dotnext/2014/piter/sidristy-unmanaged.pdfФлаги Размер Instance Доп флаги Количество методов Количество

www.luxoft.com

ДЛЯ САМОРАЗВИТИЯ

Подробнее на www.luxoft-training.ru

Мастер-класс от .Net-гуру, Дино Эспозито

«Свежий взгляд на проектирование

реального ПО: от DDD и CQRS до Event

Sourcing»

25 октября, Москва

Page 16: UNMANAGED - JUG Ru Grouppublic.jugru.org/dotnext/2014/piter/sidristy-unmanaged.pdfФлаги Размер Instance Доп флаги Количество методов Количество

www.luxoft.com

`

ВОПРОСЫ

Fb: @luxoftTwitter: @sidristij, @luxoft

Luxoft.com