mirror of
https://github.com/NohamR/knowledge-kit.git
synced 2026-05-25 04:17:17 +00:00
docs: image url
This commit is contained in:
@@ -25,15 +25,15 @@ print("over")
|
||||
|
||||
- `var season: Season = Season.spring` 基础枚举,默认值是0。
|
||||
|
||||
<img src="./../assets/EnumBaseMemoryLayoutDemo1.png" style="zoom:25%">
|
||||
<img src="https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/EnumBaseMemoryLayoutDemo1.png" style="zoom:25%">
|
||||
|
||||
- `season = Season.summer`,此时可以看到第一个字节的位置是1.
|
||||
|
||||
<img src="./../assets/EnumBaseMemoryLayoutDemo2.png" style="zoom:25%">
|
||||
<img src="https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/EnumBaseMemoryLayoutDemo2.png" style="zoom:25%">
|
||||
|
||||
- `season = Season.antumn` ,此时可以看到第一个字节的位置是2
|
||||
|
||||
<img src="./../assets/EnumBaseMemoryLayoutDemo3.png" style="zoom:25%">
|
||||
<img src="https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/EnumBaseMemoryLayoutDemo3.png" style="zoom:25%">
|
||||
|
||||
结论:查看内存信息,可以看到**不带关联值、不带原始值的基础枚举,只占1个字节大小空间,且值为默认值**
|
||||
|
||||
@@ -69,11 +69,11 @@ print("over")
|
||||
|
||||
- `var season: Season = Season.spring` 基础枚举,变量默认值,可以看到第一个字节的位置是0
|
||||
|
||||
<img src="./../assets/EnumWithRawValueMemoryLayoutDemo1.png" style="zoom:25%">
|
||||
<img src="https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/EnumWithRawValueMemoryLayoutDemo1.png" style="zoom:25%">
|
||||
|
||||
- `season = .winter` 基础枚举,当赋值为 winter 的时候,可以看到第一个字节的位置是3
|
||||
|
||||
<img src="./../assets/EnumWithRawValueMemoryLayoutDemo2.png" style="zoom:25%">
|
||||
<img src="https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/EnumWithRawValueMemoryLayoutDemo2.png" style="zoom:25%">
|
||||
|
||||
结论:**只带有原始值的枚举,同样只占用1个字节,该字节的值为枚举的位置索引(比如1、2),而非原始值。原始值不占用枚举的内存**
|
||||
|
||||
@@ -107,7 +107,7 @@ print("over")
|
||||
|
||||
`.spring` 有3个 Int,单个 Int 占8个字节空间,所以红色框代表 spring 的1,蓝色框代表 spring 的2,绿色框代表 spring 的3,黄色框代表枚举的第1个 case,剩余7个字节,为空。后续的7个字节是为了内存对齐而补齐的内存。
|
||||
|
||||
<img src="./../assets/AssociatedEnumMemoryLayoutDemo1.png" style="zoom:25%">
|
||||
<img src="https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/AssociatedEnumMemoryLayoutDemo1.png" style="zoom:25%">
|
||||
|
||||
其内存信息如下(8字节为1组,对应上图)
|
||||
|
||||
@@ -133,7 +133,7 @@ print("over")
|
||||
|
||||
- `season = Season.summer(4, 5)` 带有关联值的枚举,`.summer` 这个枚举关联值有2个 Int,单个 Int 占8个字节空间,所以红色框代表 summer 第一个关联值 4,蓝色框代表 summer 第二个关联值 5,绿色框为空,黄色框代表枚举的第2个 case,剩余7个字节,为空。
|
||||
|
||||
<img src="./../assets/AssociatedEnumMemoryLayoutDemo3.png" style="zoom:25%">
|
||||
<img src="https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/AssociatedEnumMemoryLayoutDemo3.png" style="zoom:25%">
|
||||
|
||||
其内存信息如下(8字节为1组,对应上图)
|
||||
|
||||
@@ -147,7 +147,7 @@ print("over")
|
||||
|
||||
- `season = Season.antumn(6) 带有关联值的枚举,`. `antumn` 存在关联值 1个 Int,单个 Int 占8个字节空间,所以红色框代表 antumn 的6,蓝色框为空,绿色框为空,黄色框代表枚举的第3个 case,剩余7个字节,为空。
|
||||
|
||||
<img src="./../assets/AssociatedEnumMemoryLayoutDemo4.png" style="zoom:25%">
|
||||
<img src="https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/AssociatedEnumMemoryLayoutDemo4.png" style="zoom:25%">
|
||||
|
||||
其内存信息如下(8字节为1组,对应上图)
|
||||
|
||||
@@ -161,7 +161,7 @@ print("over")
|
||||
|
||||
- `season = Season.winter(true)` 带有关联值的枚举,`. `winter` 关联值是 1个 Bool,单个 Bool 占1个字节空间,所以红色框代表 winter 的 true,蓝色框为空,绿色框为空,黄色框代表枚举的第4个 case,剩余7个字节,为空。
|
||||
|
||||
<img src="./../assets/AssociatedEnumMemoryLayoutDemo5.png" style="zoom:25%">
|
||||
<img src="https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/AssociatedEnumMemoryLayoutDemo5.png" style="zoom:25%">
|
||||
|
||||
其内存信息如下(8字节为1组,对应上图)
|
||||
|
||||
@@ -175,7 +175,7 @@ print("over")
|
||||
|
||||
- `season = Season.unknown` 带有关联值的枚举,`unknown` 没有关联值,所以红色框为空,蓝色框为空,绿色框为空,黄色框代表枚举的第5个 case,剩余7个字节,为空。
|
||||
|
||||
<img src="./../assets/AssociatedEnumMemoryLayoutDemo6.png" style="zoom:25%">
|
||||
<img src="https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/AssociatedEnumMemoryLayoutDemo6.png" style="zoom:25%">
|
||||
|
||||
其内存信息如下(8字节为1组,对应上图)
|
||||
|
||||
@@ -299,7 +299,7 @@ case1 占用8个字节,case2 占用1个字节,能用 case1 的8个字节的
|
||||
|
||||
更改验证标签对于枚举占用内存大小的影响
|
||||
|
||||
<img src="./../assets/SwiftEnumCaseNumAffectMemory.png" style="zoom:40%" />
|
||||
<img src="https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/SwiftEnumCaseNumAffectMemory.png" style="zoom:40%" />
|
||||
|
||||
可以看到 enum 只有1个 case 的时候,内存大小只和最大关联值大小有关,1个 case 的情况下不需要额外的空间来判断所属哪个 case。
|
||||
|
||||
@@ -329,7 +329,7 @@ print("over")
|
||||
|
||||
断点停到 `var season: Season = Season.spring(1, 2, 3)` 位置
|
||||
|
||||
<img src="./../assets/AssociatedEnumMemoryLayoutExplore.png" style="zoom:25%">
|
||||
<img src="https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/AssociatedEnumMemoryLayoutExplore.png" style="zoom:25%">
|
||||
|
||||
将断点处的汇编单独摘出来研究
|
||||
|
||||
|
||||
Reference in New Issue
Block a user