xcode 使用 2 LinkMap 文件 生成

    xiaoxiao2021-12-14  18

     

     

    通过link map文件可以直观的看到那些文件占用的包的大小。这是我分析之后的文件,可以直观的看出那些东西占用了多少的内存。

     

    build setting 中  设置 write Link Map  文件。

     

     

     

    1.首先列出来的是目标文件列表(中括号内为文件编号): # Path: /Users/mxr/Library/Developer/Xcode/DerivedData/huashida_home.xcodeproj-fvbzvmahuzlfgqbzehannctanrbl/Build/Products/Debug-iphoneos/4dBookCity.app/4dBookCity # Arch: arm64 # Object files: [  0] linker synthesized [  1] /Users/mxr/Library/Developer/Xcode/DerivedData/huashida_home.xcodeproj-fvbzvmahuzlfgqbzehannctanrbl/Build/Intermediates.noindex/huashida_home.build/Debug-iphoneos/4dBookCity.build/Objects-normal/arm64/Bulk_Arrays_12.o [  2] /Users/mxr/Library/Developer/Xcode/DerivedData/huashida_home.xcodeproj-fvbzvmahuzlfgqbzehannctanrbl/Build/Intermediates.noindex/huashida_home.build/Debug-iphoneos/4dBookCity.build/Objects-normal/arm64/MXRSnapLearnInviteView.o

     2.接着是一个段表,描述各个段在最后编译成的可执行文件中的偏移位置及大小,包括了代码段(__TEXT,保存程序代码段编译后的机器码)和数据段(__DATA,保存变量值) # Sections: # Address   Size        Segment Section 0x100005B00 0x0304A29C  __TEXT  __text 0x10304FD9C 0x00004BC0  __TEXT  __stubs 0x10305495C 0x000044E8  __TEXT  __stub_helper 0x103058E50 0x0021563C  __TEXT  __cstring 0x10326E48C 0x000AD400  __TEXT  __objc_methname 0x10331B88C 0x0000E6BA  __TEXT  __objc_classname 0x103329F46 0x000166E3  __TEXT  __objc_methtype 0x103340640 0x002A0B60  __TEXT  __const 0x1035E11A0 0x001346D4  __TEXT  __gcc_except_tab 0x103715874 0x00008C78  __TEXT  __ustring 0x10371E4EC 0x0004D80C  __TEXT  __unwind_info 0x10376BCF8 0x00000300  __TEXT  __eh_frame 0x10376C000 0x000015D8  __DATA  __got 0x10376D5D8 0x00003280  __DATA  __la_symbol_ptr 0x103770858 0x00001838  __DATA  __mod_init_func 0x103772090 0x000FF7F8  __DATA  __const 0x103871888 0x0006F9C0  __DATA  __cfstring 0x1038E1248 0x00004778  __DATA  __objc_classlist 0x1038E59C0 0x00000290  __DATA  __objc_nlclslist 0x1038E5C50 0x00000708  __DATA  __objc_catlist 0x1038E6358 0x00000038  __DATA  __objc_nlcatlist 0x1038E6390 0x00000910  __DATA  __objc_protolist 0x1038E6CA0 0x00000008  __DATA  __objc_imageinfo 0x1038E6CA8 0x00206C58  __DATA  __objc_const 0x103AED900 0x00027F28  __DATA  __objc_selrefs 0x103B15828 0x000000C0  __DATA  __objc_protorefs 0x103B158E8 0x000041B8  __DATA  __objc_classrefs 0x103B19AA0 0x000030C0  __DATA  __objc_superrefs 0x103B1CB60 0x0000BB54  __DATA  __objc_ivar 0x103B286B8 0x0002CB00  __DATA  __objc_data 0x103B551C0 0x01D52748  __DATA  __data 0x1058A7920 0x00714878  __DATA  __bss 0x105FBD000 0x0012B978  __DATA  __common

     首列是数据在文件的偏移位置,第二列是这一段占用大小,第三列是段类型,代码段和数据段,第四列是段名称。 每一行的数据都紧跟在上一行后面,如第二行__stubs的地址0x10304FD9C就是第一行__text的地址0x100005B00加上大小0x0304A29C,整个可执行文件大致数据分布就是这样。

     3.接着就是按上表顺序,列出具体的按每个文件列出每个对应字段的位置和占用空间 # Symbols: # Address   Size        File  Name 0x100005B00 0x000000EC  [  2] -[MXRSnapLearnInviteView drawRect:] 0x100005BEC 0x0000024C  [  2] -[MXRSnapLearnInviteView generatorlogoImageQRCode] 0x100005E38 0x0000005C  [  2] _CGRectMake 0x100005E94 0x00000034  [  2] -[MXRSnapLearnInviteView inviteCode] 0x100005EC8 0x00000050  [  2] -[MXRSnapLearnInviteView setInviteCode:] 0x100005F18 0x0000003C  [  2] -[MXRSnapLearnInviteView .cxx_destruct] 0x100005F54 0x000001D8  [  3] -[MXRPKHomeCellViewModel initWithModel:] 0x10000612C 0x0000016C  [  3] -[MXRPKHomeCellViewModel encodeWithCoder:] 0x100006298 0x00000268  [  3] -[MXRPKHomeCellViewModel initWithCoder:] 0x100006500 0x00000040  [  3] -[MXRPKHomeCellViewModel desc] 0x100006540 0x00000044  [  3] -[MXRPKHomeCellViewModel setDesc:] 0x100006584 0x00000040  [  3] -[MXRPKHomeCellViewModel name] 0x1000065C4 0x00000044  [  3] -[MXRPKHomeCellViewModel setName:] 0x100006608 0x00000040  [  3] -[MXRPKHomeCellViewModel pic] 0x100006648 0x00000044  [  3] -[MXRPKHomeCellViewModel setPic:] 0x10000668C 0x00000040  [  3] -[MXRPKHomeCellViewModel classifyId] 0x1000066CC 0x00000044  [  3] -[MXRPKHomeCellViewModel setClassifyId:] 0x100006710 0x000000B8  [  3] -[MXRPKHomeCellViewModel .cxx_destruct] ... 0x1060C82D0 0x000000C0  [3391] _jerrenv 0x1060C8390 0x000204E0  [4793] _GC_arrays 0x1060E8870 0x00000100  [4793] _GC_bm_table 0x1060E8970 0x00000008  [4793] _GC_noop_sink

    同样首列是数据在文件的偏移地址,第二列是占用大小,第三列是所属文件序号,对应上述Object files列表,最后是名字。

      

    4、已废弃&多余重复的字段

    # Dead Stripped Symbols: #           Size        File  Name <<dead>>    0x00000001  [  1] literal string:  <<dead>>    0x00000005  [  3] literal string: desc <<dead>>    0x00000005  [  3] literal string: name <<dead>>    0x00000004  [  3] literal string: pic <<dead>>    0x0000000B  [  3] literal string: classifyId <<dead>>    0x0000000E  [  3] literal string: .cxx_destruct <<dead>>    0x0000000B  [  3] literal string: v24@0:8@16 <<dead>>    0x00000008  [  3] literal string: v16@0:8 <<dead>>    0x00000008  [  3] literal string: @16@0:8 <<dead>>    0x00000001  [  4] literal string:  <<dead>>    0x00000007  [  4] literal string: System <<dead>>    0x0000000C  [  4] literal string: UnityEngine <<dead>>    0x0000000A  [  4] literal string: System.IO <<dead>>    0x00000008  [  5] 8-byte-literal <<dead>>    0x0000000C  [  5] literal string: PRIMARY KEY <<dead>>    0x0000000C  [  5] literal string: FOREIGN KEY <<dead>>    0x00000001  [  5] literal string:  <<dead>>    0x00000020  [  5] CFString <<dead>>    0x00000020  [  5] CFString <<dead>>    0x00000008  [  5] _LKSQL_Type_Text <<dead>>    0x00000008  [  5] _LKSQL_Type_Int <<dead>>    0x00000008  [  5] _LKSQL_Type_Double <<dead>>    0x00000008  [  5] _LKSQL_Type_Blob <<dead>>    0x00000008  [  5] _LKSQL_Attribute_NotNull <<dead>>    0x00000008  [  5] _LKSQL_Attribute_PrimaryKey <<dead>>    0x00000008  [  5] _LKSQL_Attribute_Default <<dead>>    0x00000008  [  5] _LKSQL_Attribute_Unique <<dead>>    0x00000008  [  5] _LKSQL_Attribute_Check <<dead>>    0x00000008  [  5] _LKSQL_Attribute_ForeignKey <<dead>>    0x00000008  [  5] _LKSQL_Convert_FloatType <<dead>>    0x00000008  [  5] _LKSQL_Convert_IntType <<dead>>    0x00000008  [  5] _LKSQL_Convert_BlobType <<dead>>    0x00000008  [  5] _LKSQL_Mapping_Inherit <<dead>>    0x00000008  [  5] _LKSQL_Mapping_Binding <<dead>>    0x00000008  [  5] _LKSQL_Mapping_UserCalculate <<dead>>    0x00000008  [  5] _LKDB_TypeKey <<dead>>    0x00000008  [  5] _LKDB_TypeKey_Model <<dead>>    0x00000008  [  5] _LKDB_TypeKey_JSON <<dead>>    0x00000008  [  5] _LKDB_TypeKey_Combo ... <<dead>>    0x00000004  [4311] 4-byte-literal <<dead>>    0x00000004  [4311] 4-byte-literal <<dead>>    0x00000004  [4311] 4-byte-literal <<dead>>    0x00000004  [4311] 4-byte-literal <<dead>>    0x00000008  [4311] 8-byte-literal <<dead>>    0x00000008  [4312] 8-byte-literal <<dead>>    0x00000014  [4320] __ZN15PxcConvexMeshHLC2EP17PxConvexMeshData_ <<dead>>    0x00000004  [4320] 4-byte-literal <<dead>>    0x00000004  [4320] 4-byte-literal <<dead>>    0x00000004  [4319] 4-byte-literal <<dead>>    0x00000076  [4319] literal string: /Applications/buildAgent/work/3d1e9e6e6eefaa7f/SDKs/compiler/iphone/../../../LowLevel/common/include/utils/PxcArray.h

     

     

     

    参考 : http://blog.csdn.net/wm9028/article/details/50462320

    转载请注明原文地址: https://ju.6miu.com/read-972312.html

    最新回复(0)