Что означает "компактная информация о раскрутке" в синтезаторе линкера
Когда я анализирую файл карты ссылок, который был сгенерирован xcode, в секции синтезатора компоновщика появляются данные, называемые "информация компактного размотки".
compact unwind info 858.57KB 858572 Unchecked
это займет около 858 КБ пространства. Я хочу знать, какие фактические данные в этом пространстве. Есть ли способ уменьшить этот размер?
Суммарный выход линкера синтезированного раздела:
compact unwind info 858.57KB
helper helper 24B
objc image info 8B
non-lazy-pointer 8B
non-lazy-pointer-to-local: dyld_stub_binder 8B
non-lazy-pointer-to-local: _vm_page_size 8B
non-lazy-pointer-to-local: _tanh 8B
non-lazy-pointer-to-local: _tan 8B
non-lazy-pointer-to-local: _strdup 8B
non-lazy-pointer-to-local: _strcmp 8B
non-lazy-pointer-to-local: _sinh 8B
non-lazy-pointer-to-local: _sin 8B
non-lazy-pointer-to-local: _realloc 8B
non-lazy-pointer-to-local: _protocol_getName 8B
non-lazy-pointer-to-local: _object_getIndexedIvars 8B
non-lazy-pointer-to-local: _objc_readClassPair 8B
non-lazy-pointer-to-local: _objc_lookUpClass 8B
non-lazy-pointer-to-local: _objc_getRequiredClass 8B
non-lazy-pointer-to-local: _objc_getProtocol 8B
non-lazy-pointer-to-local: _objc_getMetaClass 8B
non-lazy-pointer-to-local: _objc_getClass 8B
non-lazy-pointer-to-local: _objc_copyClassNamesForImage 8B
non-lazy-pointer-to-local: _objc_allocateClassPair 8B
non-lazy-pointer-to-local: _malloc 8B
non-lazy-pointer-to-local: _mach_task_self_ 8B
.....
1 ответ
Информация о размотке - это информация, необходимая для размотки стека при возникновении / возбуждении исключения. Разматывание стека включает в себя определение того, где были сохранены указатель кадра, указатель стека, адрес возврата и все сохраненные регистры, чтобы можно было восстановить состояние для предыдущего кадра. Он также определяет, для любого заданного стекового фрейма, есть ли функция-обработчик для перемотки, обрабатывать "catch" и "finally" функции обработки исключений в таких языках, как C++ и Objective-C.
Вся эта информация для текущего кадра определяется из указателя инструкции. Поскольку выполнение продолжается через функцию от самой ее первой инструкции, детали меняются, потому что каждая инструкция может модифицировать соответствующие регистры и / или выдвигать или выдвигать сохраненные значения регистров в стек и из стека.
Информация по размотке описывает, как определить из указателя инструкции, где найти все эти значения.
Существуют различные формы раскручивания информации, которые могут быть встроены в двоичный файл. Одна распространенная форма - DWARF, раскручивает информацию. Это довольно неэффективное пространство. Apple разработала компактную раскручиваемую информацию, потому что, хотите верьте, хотите нет, на самом деле она занимает гораздо меньше места.
Подробности о компактном формате раскрутки можно найти здесь.