酷酷的哀殿


  • 首页

  • 技术

  • 笔记

  • 杂记

  • Todo

  • 关于

  • 搜索
close

定量分析 static 字符串对二进制体积的影响

时间: 2021-03-17   |   分类: 技术     |   阅读: 435 字 ~1分钟

[toc]

前言

今天交流群有网友遇到 linkmap 文件无法准确分析 static 字符串对二进制的体积的问题。

本文会通过具体的例子对 static 字符串的体积进行定量分析

测试步骤

第一步:准备测试代码

1
static NSString *const this_is_a_key = @"kukudeaidian";

测试代码是为方便区别。请读者按照代码规范进行开发

第二步:通过命令行分别编译 2 个可执行文件

1
xcrun --sdk iphoneos clang -target arm64-apple-ios8.0 main.m -fmodules -fobjc-arc -o demo

第二步:获取每个 section 的大小

1
otool -l demo | egrep "name|size"

第三步:通过 diff 工具对比

体积差异:(0x1e3-0x1d6)+(0x68-0x60)+(0x60-0x40)+(16744-16712) = 13+8+32+32 = 85

差异内容

下面,我们看看主要的差异点

差异一:__TEXT,__cstring

体积变化: 0x1e3-0x1d6=13

image

差异二:__DATA,__const

体积变化:0x68-0x60=8

image

差异三:__DATA,__cfstring

提交变化: 0x60-0x40=32

image

0x0000000100014040是 isa,指向 ___CFConstantStringClassReference

0x0000000100007b6c 指向 差异一 的字符串

差异四:Symbol Table

image

image

总结

本文分享了通过 otool 分析二进制文件体积变化的的技术方案。除静态变量外,类似增加 Class 对体积的影响都可以用本方案分析。

相关推荐

  • 跟着 NSDictionary 的底层设计学习优化技巧(2)
  • 跟着 NSDictionary 的底层设计学习优化技巧(3)
  • iOS 各种奇怪的崩溃
  • iOS runtime 研究笔记
  • 通过 php 的语法设计将判断 NSArray 数组是否包含指定元素的时间复杂度从 O(n) 降为 O(1)
#iOS# #二进制#
Objective-C 与 泛型
从底层分析一下存在跨进程通信问题的 NSUserDefaults 还能用吗?
  • 文章目录
  • 站点概览
酷酷的哀殿

酷酷的哀殿

单身狗

74 日志
83 标签
    • 前言
    • 测试步骤
    • 差异内容
      • 差异一:__TEXT,__cstring
      • 差异二:__DATA,__const
      • 差异三:__DATA,__cfstring
      • 差异四:Symbol Table
    • 总结
© 2021 酷酷的哀殿 京ICP备18052541号-2
Powered by - Hugo v0.80.0
Theme by - NexT
0%