Инлайнинг — одна из самых важных оптимизаций в компиляторах. Она не только убирает оверхед от вызова, но и открывает много возможностей для других оптимизаций, например, constant folding, dead code elimination и т.д. Более того, иногда инлайнинг приводит к уменьшению размера вызывающей ф-ции! Я опросил несколько человек на предмет знают ли они по каким правилам инлайнятся ф-ции в C# и большинство ответили, что JIT смотрит на размер IL кода и инлайнит только маленькие ф-ции размером, скажем, до 32 байт. Поэтому я решил написать этот пост, чтобы раскрыть детали реализации при помощи вот такого примера, который покажет сразу несколько эвристик в деле:
Рубрика «inlining»
Как JIT инлайнит наш C# код (эвристики)
2020-04-08 в 6:27, admin, рубрики: .net, .net core, C#, CoreCLR, inlining, jit, ryujit, Компиляторы, оптимизации, ПрограммированиеКритерий выгодности подстановки и динамическая профилировка
2014-10-23 в 5:22, admin, рубрики: inlining, ipo, Блог компании Intel, высокая производительность, Компиляторы
Продолжаю тему межпроцедурных оптимизаций, введение в которую можно найти в предыдущем посте. Сегодня хочется немного порассуждать о подстановке функции (inlining) и о том, как подстановка влияет на производительность приложения.
Читать полностью »