当我分析Xcode生成的链接映射文件时,在"链接器合成"部分中,有一个名为"紧凑的undind Info"的数据。
compact unwind info 858.57KB 858572 Unchecked
大约需要858kb的空间尺寸。我想知道这个空间中的实际数据。它有任何方法可以降低这种尺寸吗?
链接器合成部分的总输出:
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
.....
放松信息是当异常抛弃/提高时放开堆栈所需的信息。放松堆栈涉及确定框架指针,堆栈指针,返回地址和所有保存的寄存器的存储位置,以便可以为上一个帧恢复状态。对于任何给定的堆栈框架,如果有放松的处理程序功能,则可以确定"捕获"one_answers"最后"功能,以C 和Objective-c。
从指令指针确定当前帧的所有信息。随着执行通过其第一个指令的函数进行,详细信息会更改,因为每个指令都可以修改相关寄存器和/或push或Pop cop cop the stack。
。放松信息描述了如何从指令指针中确定所有这些值的位置。
可以将各种形式的放松信息嵌入二进制中。一种常见的形式是矮人放松信息。这是相当效率的空间。苹果开发了紧凑的放松信息,因为,信不信由你,它实际上使用了更少的空间。
可以在此处找到紧凑型放松信息格式的详细信息。