2016-12-07 4 views
0

Когда я анализирую файл карты ссылок, который был сгенерирован xcode, в разделе syncized link, есть данные с названием «compact unwind info».Что значит о «компактной размотке информации» в синтезированном компоновщике

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 разработала компактную размотку информации, потому что, верьте или нет, на самом деле она использует гораздо меньше места.

Подробнее о формате компактного размотки можно найти here.

+0

большое спасибо! – Hikari