Можно ли использовать встроенные вызовы методов C ++ через библиотеки DLL? - PullRequest
2 голосов
/ 14 декабря 2010

Возможно ли использование встроенных методов компилятора C ++ через библиотеки DLL?Возможно ли это для .NET JIT?

Ответы [ 4 ]

4 голосов
/ 14 декабря 2010

Это определенное Да для .NET джиттера. Он просто загружает IL из DLL, а своевременная генерация кода делает тот факт, что он пришел из DLL, исчезает. Весь код из любой DLL попадает в одну кучу загрузчика. Одним из следствий этого является то, что DLL не может быть выгружен, если весь AppDomain не выгружен.

Определенное Нет для компилятора C ++, экспортируемые функции предварительно скомпилированы и расположены по фиксированному адресу, смещению от базового адреса DLL. Требуется косвенный переход через IAT, хотя возможны оптимизации. Но не встраивание, это должно быть сделано компилятором.

1 голос
/ 14 декабря 2010

Функция, определенная полностью в заголовочном файле C ++, должна быть встроена компилятором при нормальных обстоятельствах, поскольку для функции не назначен модуль компиляции. Конечно, можно сказать, что функция даже не принадлежит DLL, так как вы не найдете там точки входа для функции, но ИМХО, это всего лишь точка зрения придирки.

1 голос
/ 14 декабря 2010

Если бы вы не включили тег ".net", то ответ будет НЕТ . Однако с тегом ".net" джиттер должен иметь возможность по крайней мере оптимизировать , если не inline , если только DLL не является DLL с собственным кодом, с которой вы / P вызываете .

0 голосов
/ 14 декабря 2010

Вы должны проверить флаг / GL (оптимизация всей программы) для компилятора.

Этот флаг указывает компоновщику оптимизировать через границы модуля, включая встраивание функций.

...