第四节 分析枚举的内存布局以及常用指令

2021-01-30  本文已影响0人  天明天

一. 简单的枚举类型

  1. 简单枚举
enum TestEnum {
  case test1,test2,test3
}

let t = testEnum.test1
print(MemoryLayout<Testenum>.size)// 实际用了 多少 占用一个字节
print(MemoryLayout<Testenum>.stride)//分配了一个字节
print(MemoryLayout<Testenum>.alignment)// 对齐字节
  1. 存在原始值的枚举
enum TestEnum: Int{
 case test1 = 1,
 case test2 = 2,
 case test3 = 3
}
  1. 存在关联值的枚举类型
enum TestEnum {
  case test1(Int,Int,Int)
  case test2(Int,Int)
  case test3(Int)
  case test4(Bool)
  case test5
}
var e = TestEnum.test1(1,2,3)
e = .test2(1,2)
e = .test3(1)
e = .test4(true)
e  = .test5
print(MemoryLayout<Testenum>.size)//实际占用25个字节
print(MemoryLayout<TestEnum>.stride)//系统给分配32个字节
print(MemoryLayout<TestEnum>.alignment)//内存对齐8个字节


  1. 只有一个值得枚举值
enum TestEnum {

  case test5
}

print(MemoryLayout<Testenum>.size)//实际占用0个字节
print(MemoryLayout<TestEnum>.stride)//系统给分配1个字节
print(MemoryLayout<TestEnum>.alignment)//内存对齐1个字节

enum TestEnum {
  case test(Int)
}

print(MemoryLayout<Testenum>.size)//实际占用8个字节
print(MemoryLayout<TestEnum>.stride)//系统给分配8个字节
print(MemoryLayout<TestEnum>.alignment)//内存对齐8个字节

二 . 含有枚举的Switch语句底层的实现


enum TestEnum {
  case test1(Int,Int)
 case test2(Int)
 case test3
}
var t = TEstEnum.test1
switch  t  {
 case  .test1(V1,V2):
  print(t)
case . test2(V1):
  print(t)
case. test3
  print(t)
}

三. 汇编语法基础:

截屏2020-02-24下午8.44.11.png
  1. 寄存器与内存的关系
  1. 编程语言的发展


    截屏2020-02-24下午8.52.47.png

    4.常见的汇编指令


    截屏2020-02-24下午8.58.34.png
  1. lldb的常用指令
    截屏2020-02-24下午9.36.40.png
    截屏2020-02-24下午9.38.25.png
    前面是全称,后面的 n (调试高级源码)s(调试高级源码) ni(调试汇编代码)si(调试汇编代码) 常用指令,注意两者区别。
上一篇 下一篇

猜你喜欢

热点阅读