2.1 0x100001b06 : movq %rax,-0x10
2.2 0x 100001 b0a:callq 0x 100001 a10;我退出。Swift.Int在梅恩。斯威夫特:23岁
2.3 0x100001b0f : movq -0x8,%rcx
2.4 0x100001b13 : movq %rax,0x8
2.5 0x100001b17 : leaq 0x12,% rax我退出。修改:Swift.Int在
2.6 0x100001b1e : movq -0x10,%rdx
2.7 0x100001b22 : addq x10,%rsp
2.8 0x100001b26 : popq %rbp
2.9 0x100001b27 : retq
第2行-> 1:
movq %rax,-0x10
将寄存器rax%中存储的地址指向-0x10堆栈空
第2行-> 2:
您看到的是count的getter方法,这意味着在change函数之前,您将首先获得count的值,age = 18,然后count是9
寄存器读取rax
rax = 0x0000000000000009
第2行-> 6:
movq -0x10,%rdx
此时,-0x10指向分配给rdx%的地址值rax%
Rdx%存储9的地址。结束通话
超过
呼叫结束*rdx
第5行:
更改函数调用,与前面的分析相同
此时,rdi%通过更改返回的rax%已被修改为后续参数的20
第7行:
Callq *%rax,传入rdi%
点击si进入callq *%rax,可以看到一张熟悉的脸
inout`Person.count.modify:
->
0x 100001 b3e:callq 0x 100001980;我退出。二传手:梅恩的Swift.Int。斯威夫特:20
Setter函数的计数,所以我想你已经明白了。
摘要
类的计算属性不同于存储属性,地址不会直接传入
计算属性的getter值,然后将该值存储在地址中
将地址传入inout,并修改地址中存储的值
结果被传递到计算属性的设置器中
带有属性观察器的类属性也类似于计算属性
下图:
文章图片
复制入复制出
inout的本质是引用地址的传输
该职能具有单一责任的特点
inout函数就像一个黑盒。我们所要做的就是传入需要修改的变量的地址
复制输入复制输出就是这种行为
参数传入,并复制临时变量的地址
修改函数中临时变量的值
函数返回,临时变量被分配给原始参数
摘要
本文只是对类的计算和存储属性做了一个简单的验证,类似于Struct
区别可能只是类和结构的内存分布
读者可以自行分析
感谢阅读。
让我们在强者的道路上秃顶吧!!
推荐阅读
- 西瓜这种水果,我从小吃到大,最服这4种切法,好看还不脏手!
- 从贫困户到种菜能手
- 爱上一个不爱自己的人,从此喜欢成了一种执念,求而不得
- 婚词离曲 为什么老公会外遇 从《婚词离曲》探讨婚姻隐藏的问题
- 雷狼龙的逆鳞 《怪物猎人:GU/XX》从解禁到毕业 解禁之后应该做些什么
- 关爱耳健康从娃娃抓起
- 松花江坠龙事件 “松花江坠龙”事件 具体是怎么一回事 难道真的有龙从天而坠
- 东风起亚k3 从无到“优” 东风悦达起亚再创佳绩 全新K3将“火”
- 世界潮我看 | 好多人从小吃到大的市井小店,爱的就是这个味
- st音乐 未来音乐战场:从“听音乐”到“用音乐”