通过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