当前位置: 首页 > news >正文

swift-7-汇编分析闭包本质

一、汇编分析 fn1里面存放的东西

func testClosure2() {
    class Person {
        var age: Int = 10
    }
    
    typealias Fn = (Int) -> Int
  
    var num = 0
    func plus(_ i: Int) -> Int {
    num += i
    return num
    }
   return plus
    } // 返回的plus和num形成了闭包


 
    var fn1 = getFn()
    print(fn1(1)) // 1
    print(fn1(3)) // 4
    
    var fn2 = getFn()
    print(fn2(2)) // 2
    print(fn2(4)) // 6
}

1.1 常规函数的分析

 print(MemoryLayout.stride(ofValue: fn )) // 16  这个计算出来是16个字节

1.2 fn1 占用多少字节 不捕获变量的情况

但是 %rax 只能存8个字节,fun函数怎么返回16个的,进去看看

1.2 fn1 占用多少字节 捕获变量的情况 28

从下边可以看出alloc %rax 堆空间里面的地址都没有被修改 

 

1.3 fn1 是怎么调用的

通过分析 在 fn1 里面的16 个字节 前八个存的是函数地址,后八个存的是堆地址,那么在这里函数调用就不会是 callq + 写死的地址 而是从上面的地址取出前8个函数地址来调用,对应就是下边的这里就是fn1 的调用

* %rax 的取值过程

1.4 fn1 参数传递 过程 50 ?

1.5   num 是如何相加的 51 ?

1.6  fn1 和 fn2 

1.7 总结 1.01

1.8 什么时候捕获 1.16

1.9 num 是全局变量的是怎么样的?

2.0 本来就在堆空间的是怎么捕获的

 

2.1 练习里面两个闭包的情况产生捕获 1.32

共享一份堆空间

左右对等

2.2 函数遍历的捕获

 

2.3 如果返回值是函数类型,那么参数的修饰要保持统一

func add(_ num: Int) -> (inout Int) -> Void {
func plus(v: inout Int) {
v += num
}
return plus
}
var num = 5
add(20)(&num) print(num)

2.4 自动闭包 2.04

2.4.1 有时候有可能返回,有可能不返回的情况

2.4.2 自动闭包 2.10

2.4.3 空合并运算符

http://www.dtcms.com/a/99015.html

相关文章:

  • 蓝桥杯省赛 棋盘 3533 二维差分+二维前缀和
  • Ruoyi-Vue拆解:优雅实现Vue页面过渡动画
  • 消息队列篇--通信协议篇--SSL/TLS协议
  • 【教学类-58-16】黑白三角拼图14——黑白三角图连接部分的白线(2*2宫格)
  • AI大模型底层技术——Multi-LoRA Combination Methods
  • 【免费】2007-2019年各省地方财政科学技术支出数据
  • leetcode 2360 图中最长的环 题解
  • 明天该穿哪件内衣出门?
  • 数据结构(并查集,图)
  • pip install cryptacular卡住,卡在downloading阶段
  • 嵌入式硬件篇---嘉立创PCB绘制
  • 【密码学】一文了解密码学的基本
  • 爱普生FC-135晶振5G手机的极端温度性能守护者
  • Ditto-Talkinghead:阿里巴巴数字人技术新突破 [特殊字符]️
  • Vue3组件响应式优化方法
  • Visual Studio 2022静态库与动态库创建及使用完全指南
  • Gerbv 与 Python 协同:实现 Gerber 文件智能分析与制造数据自动化
  • 知能行每日综测
  • vue.js前端条件渲染指令相关知识点
  • AI 时代,我们该如何写作?
  • MySQL———作业实验
  • Java进阶
  • 记录vite引入sass预编译报错error during build: [vite:css] [sass] Undefined variable.问题
  • MySQL的基础语法1(增删改查、DDL、DML、DQL和DCL)
  • HTML5 Web SQL 数据库学习笔记
  • 通信之光纤耦合器
  • cookie详解
  • comp2123 RangeFunc matrix
  • k8s网络策略
  • 从零开始搭建Anaconda环境