链接器合成中的"compact unwind info"意味着什么



当我分析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。

放松信息描述了如何从指令指针中确定所有这些值的位置。

可以将各种形式的放松信息嵌入二进制中。一种常见的形式是矮人放松信息。这是相当效率的空间。苹果开发了紧凑的放松信息,因为,信不信由你,它实际上使用了更少的空间。

可以在此处找到紧凑型放松信息格式的详细信息。

最新更新