美文网首页
load方法为什么耗时

load方法为什么耗时

作者: 智能老树皮 | 来源:发表于2022-04-29 09:22 被阅读0次

+ (void)load  {

    printf("123");

}

这段代码编译完之后,这个函数会储存在Mach-O中的TEXT两个段中,__text存函数二进制,cstring存储字符串 123

要执行printf函数,首先需要访问__text触发一次page In 读入物理内存,为了要打印字符串,还需要访问cstring,还会触发一次page In

有很多同学不了解page In,这里介绍一下,首先先要知道mmap

mmap 的全称是 memory map,是一种内存映射技术,可以把文件映射到虚拟内存的地址空间里,这样就可以像直接操作内存那样来读写文件。

当读取虚拟内存,其对应的文件内容在物理内存中不存在的时候,会触发一个事件: Page In,把对应的文件内容读入物理内存中。

Page In又做了哪些事情呢?

MMU(Memory Management Unit,内存管理单元)找到空闲的物理内存页面

触发磁盘IO,把数据读入到物理内存

如果是TEXT段的页,要进行解密(iOS13之后不需要解密)

对解密后的页,进行签名验证

为了执行这个函数,系统付出了两个page In的代价,所以一旦load方法过多,会影响启动速度

参考:iOS成长之路

相关文章

  • load方法为什么耗时

    + (void)load { printf("123");} 这段代码编译完之后,这个函数会储存在Mach-O中...

  • Method Swizzling 黑魔法注意点

    1.为什么要在+load中实现,不要调用【super load】方法 因为+load方法是在类加载的时候调用的,与...

  • iOS:动态库的加载顺序

    在写 《iOS:load方法能不能被hook?》 和 《iOS启动优化:App启动耗时在线监控与AppDele...

  • 分析Category、load、initialize的加载原理

    先来抛出3个问题:1.Category为什么不能直接添加属性?2.Category中有load方法吗?load方法...

  • 一个中文引起的启动70ms耗时

    最近在做启动优化的时候,发起启动过程中AFNetWorking内部一个方法耗时70ms,占了所有+ load方法中...

  • jQuery |AJAX load() 方法

    jQuery load() 方法 jQuery load() 方法是简单但强大的 AJAX 方法。 load() ...

  • Category-load方法

    01load方法的基本使用 Category中有load方法吗?load方法是什么时候调用的?load 方法能继承...

  • OC分类二(Category)

    +load M、题:Category中有load方法吗?load方法什么时候调用?load方法能继承吗? 答:有;...

  • load

    1、category中有load方法吗?load方法是什么时候调用的?方法能继承么?1)有load方法2)load...

  • Category 的原理

    疑问?Category中有load方法吗?load方法是什么时候调用的?load 方法能继承吗?load、init...

网友评论

      本文标题:load方法为什么耗时

      本文链接:https://www.haomeiwen.com/subject/nctsyrtx.html