From b8472807aa93adb0bdedd24888840673d2135407 Mon Sep 17 00:00:00 2001 From: jiulinxiri Date: Fri, 7 Jan 2022 11:10:38 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=20README=20=E6=96=87?= =?UTF-8?q?=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 08 类.playground/Resources/README.md | 45 +++++++++++++-------------- 1 file changed, 21 insertions(+), 24 deletions(-) diff --git a/08 类.playground/Resources/README.md b/08 类.playground/Resources/README.md index 56c4d2a..87beb32 100644 --- a/08 类.playground/Resources/README.md +++ b/08 类.playground/Resources/README.md @@ -21,12 +21,12 @@ func test() { test()方法在内存中的存储结构 -jiulinxiri_20220106223910.png +jiulinxiri_20220106223910.png * point结构体是值类型,在内存中存储的是值 * size类是引用类型,在内存中存储的是Size对象的内存地址 -jiulinxiri_20220106224431.png +jiulinxiri_20220106224431.png * 前边16个字节存储的是指向类型信息以及引用计数 * 后边的16个字节存储的是成员变量 @@ -50,7 +50,7 @@ var p2 = p1 栈空间的存储结构如下所示 -jiulinxiri_20220107093427 +jiulinxiri_20220107093427 > p1和p2成员变量之间的赋值操作没有任何影响 @@ -94,7 +94,7 @@ func test() { 内存中的存储结构如下图所示 -jiulinxiri_20220107102828 +jiulinxiri_20220107102828 @@ -115,31 +115,28 @@ s1 = Size(width: 11, height: 22) 内存中的结构如下图所示 -jiulinxiri_20220107104836 +jiulinxiri_20220107104836 +#### 对象堆空间申请过程 +在Swift中,创建类的实例对象,要向堆空间申请内存,大概流程如下 +* Class.__allocating_init()_ +* libswiftCore.dylib:_swift_allocObject_ +* libswiftCore.dylib:swift_slowAlloc +* libsystem_malloc.dylib:malloc +**在Mac、iOS中的malloc函数分配的内存大小总是16的倍数** +通过 `class_getInstanceSize` 可以得知:类的对象至少需要占用多少内存 +```swift +class Point { var x = 11 +var test = true +var y = 22 +} +var p = Point() class_getInstanceSize(type(of: p)) // 40 +class_getInstanceSize(Point.self) // 40 +``` - - - - - - - - - - - -> 对象的堆空间申请过程 -> -> 在Swift中,创建类的实例对象,要向堆空间申请内存,大概流程如下 -> -> 1. Class.__allocating_init()_ -> 2. libswiftCore.dylib:_swift_allocObject_ -> 3. libswiftCore.dylib:swift_slowAlloc -> 4. libsystem_malloc.dylib:malloc