前语:

在Swift中运用MemoryLayout获取数据类型、特点的内存情况。

1.数据类型

Swift中数据类型首要分为值类型与引用类型;

1.1 值类型(Value type):包含结构体和枚举
结构体包含:Bool、Int、Float、Double、Character、String、Array、Dictionary、Set。

枚举包含:Optional。
1.2 引用类型(reference type):类(Class)

2.MemoryLayout

MemoryLayout的源码如下:

@frozen public enum MemoryLayout<T> {
    //下面几个办法首要获取的是数据类型的内存大小
  public static var size: Int { get }//获取数据类型占用的内存
  public static var stride: Int { get }//获取体系分配给数据类型的内存大小,也便是实践内存大小
  public static var alignment: Int { get }//内存对齐系数
    //下面几个首要获取的是数据类型声明的特点的内存大小
  public static func size(ofValue value: T) -> Int//获取特点占用的内存
  public static func stride(ofValue value: T) -> Int//获取体系分配给特点的内存
  public static func alignment(ofValue value: T) -> Int //获取特点的内存对齐系数
}

3.首要运用方式

3.1获取数据类型、类的内存大小

MemoryLayout<T>.size<br>
MemoryLayout<T>.stride<br>
MemoryLayout<T>.alignment<br>

3.2获取特点的内存大小

> MemoryLayout<T>.size(ofValue value:T><br>
> MemoryLayout<T>.stride(ofValue value:T><br>
> MemoryLayout<T>.alignment(ofValue value:T><br>

获取内存的:

enum Direction{
  case north
  case south
  case west
  case east
}
//获取枚举Direction的内存大小
MemoryLayout<Direction>.size //打印成果:1
MemoryLayout<Direction>.stride //打印成果:1
MemoryLayout<Direction>.alignment// 打印成果:1
//获取特点direct的内存大小
var direct = Direction.west
print(MemoryLayout.size(ofValue: direct))//打印成果:1
print(MemoryLayout.stride(ofValue: direct))//打印成果:1
print(MemoryLayout.alignment(ofValue: direct))//打印成果1

获取特点direct的内存还能够运用:

MemoryLayout<Direction>.size(ofValue: direct)//打印成果:1
MemoryLayout<Direction>.stride(ofValue: direct)//打印成果:1
MemoryLayout<Direction>.alignment(ofValue: direct)//打印成果:1

两者的区别在于:第二个只能获取类型为Direction的特点的内存,第一个能够获取恣意类型特点的内存。