iOS启动优化
2021-10-22 本文已影响0人
你飞跃俊杰
方法都在栈中,先进后出
![](https://img.haomeiwen.com/i3355903/9bdb34e453169330.png)
属性的地址,整形2个占一个地址(高八位,低八位)
![](https://img.haomeiwen.com/i3355903/a923235c38943c93.png)
1.非结构体类型:32位 4字节对齐,64位 8字节对齐
2.结构体类型:以结构体中,最大内存的整数倍对齐
3.属性8字节对齐,对象16字节对齐
![](https://img.haomeiwen.com/i3355903/6dce7882aa162d12.png)
内存都是一直存在的,只是分为活跃跟不活跃
真实地址:
Win98 及以前的系统,1.导致内存不够(回收问题),2.不安全(直接访问内存地址,可读到其他程序的数据),
虚拟内存地址:
虚拟内存映射表,内申请的内存有限制,无法取读取程序以外的内存
![](https://img.haomeiwen.com/i3355903/d0e189da31e972e6.png)
![](https://img.haomeiwen.com/i3355903/6f7e7e8c27325bc8.png)
MMU是 MemoryManagementUnit 的缩写即,内存管理单元. 针对各种CPU, MMU是个可选的配件. MMU负责的是虚拟地址与物理地址的转换. 提供硬件机制的内存访问授权.
ASLR(地址随机化)是一种针对缓冲区溢出的安全保护技术,通过对堆、栈、共享库映射等线性区布局的随机化,通过增加攻击者预测目的地址的难度,防止攻击者直接定位攻击代码位置,达到阻止溢出攻击的目的。
但是,地址随机化不是对所有模块和内存区都进行随机化!虽然libc、栈、堆的加载位置被随机化,但主镜像不会
![](https://img.haomeiwen.com/i3355903/4587d722940c9b34.png)
![](https://img.haomeiwen.com/i3355903/887789a4f1ecc2b5.png)
查看程序启动的分页内存的数量
![](https://img.haomeiwen.com/i3355903/673e205701e06a21.png)
打印的上一个方法,因为它以为自己是一个结构体,于是内存偏移地往上差,结果查到的是上一次调用的方法
![](https://img.haomeiwen.com/i3355903/1a005160e90f6c5c.png)
linkmap,查看分页加载顺序
![](https://img.haomeiwen.com/i3355903/22290400700d03ce.png)
文件排列顺序》文件的方法排列顺序
二进制重排,将要启动要加载的代码放在一起
按照文件中的顺序去分页加载
![](https://img.haomeiwen.com/i3355903/a5d279ea0e939e95.png)
![](https://img.haomeiwen.com/i3355903/920d4a743e7c13e6.png)
![](https://img.haomeiwen.com/i3355903/898cd75534cbad1c.png)
按文件顺序重排
没有就排
![](https://img.haomeiwen.com/i3355903/ea437bcd47ec7467.png)