размер отладки и выпуска dll

Почему в cpp dll в режиме отладки на X10 больше выпуска, а в .Net они почти такого же размера?


person Yaron Naveh    schedule 28.10.2009    source источник


Ответы (4)


Для отладки программы на C ++ в DLL необходимо хранить много дополнительной информации, чтобы отладчик мог узнать о коде во время выполнения. C ++ не требует времени выполнения, чтобы иметь возможность проверять код, в отличие от C #, который допускает расширенный контроль времени выполнения, также известный как отражение. Эта информация присутствует в C # независимо от того, используется ли режим отладки или режим выпуска.

Кроме того, C ++ обычно компилируется непосредственно в машинный код в режиме выпуска, цель компилятора - максимально оптимизировать код, например. удалите всю постороннюю информацию и код. В C # компилятор компилируется в псевдокод, который вовремя компилируется по мере необходимости. Этот код сохраняет большую часть того, что требуется для отладки, независимо от того, является ли это выпуском или отладкой, которую вы создаете. Настолько, что можно написать декомпилятор, который вернет вам код из сборки времени выполнения.

person AnthonyLambert    schedule 28.10.2009

Может быть, потому что в .Net все проверки отладки обрабатываются движком времени выполнения, тогда как в CPP все проверки компилируются в DLL.

person cedrou    schedule 28.10.2009

.Net DLL содержат метаданные, которые поддерживают отражение во время выполнения, безопасность типов и безопасность доступа к коду. Единственное, что находится в PDB, - это имена локальных переменных и номера строк.

Где, как в C ++, для поддержки отладки необходимо вводить дополнительные метаданные, а иногда и не выполнять операции.

person Jan Bannister    schedule 28.10.2009

Вы имеете в виду C #, а не .NET. Также это зависит от вашего проекта.

У меня есть одна C ++ / CLI DLL, которая составляет 54 КБ в выпуске и 94 КБ в отладке,
и еще одна, которая составляет 88 КБ в выпуске и 124 КБ в отладке.

Мой C ++ / CLI EXE, который включает MFC, составляет 471 КБ в выпуске и 4446 КБ в отладке!

И тогда моя C # DLL составляет 135 КБ как при отладке, так и при выпуске.

person demoncodemonkey    schedule 28.10.2009