美文网首页
Swift-对象内存布局

Swift-对象内存布局

作者: lieon | 来源:发表于2020-12-14 13:12 被阅读0次

对象的内存布局:

  • 第-个8个字节存储类相关的信息表的地址,
  • 第二个8个存储引用计数相关的信息表的地址
  • 后面开始存储实例属性的内存大小

Swift中多态的实现方式

  • 底层实现与C++中的多态一致,采用的是虚表

  • 根据在类信息地址找到虚表的首地址,虚表中存了类信息和函数的入口地址

    class Animal {
        var age = 12
        var num = 23
        
        func sepak() {
            print("Animal-Speak")
        }
        
        func eat() {
            print("Animal-eat")
        }
    }
    
    class Dog: Animal {
        var weight: Int = 0
        
        override func sepak() {
            print("Dog-sepak")
        }
        
        override func eat() {
            print("Dog-eat")
        }
    }
    
    class ErHa: Dog {
        var iq: Int = 0
        
    }
    
    // 0x600001257bc0
    /**
     A8 91 FB 01 01 00 00 00
     03 00 00 00 00 00 00 00
     0F 00 00 00 00 00 00 00
     17 00 00 00 00 00 00 00
     */
    let ani = Animal()
    ani.age = 15
    ani.sepak()
    
    // 0x600001285800
    /*
     88 92 FB 01 01 00 00 00
     03 00 00 00 00 00 00 00
     0A 00 00 00 00 00 00 00
     17 00 00 00 00 00 00 00
     14 00 00 00 00 00 00 00
     */
    let dog = Dog()
    dog.age = 10
    dog.weight = 20
    
    // 0x600001285950
    /**
     88 F3 AD 0E 01 00 00 00
     03 00 00 00 00 00 00 00
     0A 00 00 00 00 00 00 00
     17 00 00 00 00 00 00 00
     14 00 00 00 00 00 00 00
     1E 00 00 00 00 00 00 00
     */
    let erHa = ErHa()
    erHa.age = 10
    erHa.weight = 20
    erHa.iq = 30
    
image.png

相关文章

  • Swift-对象内存布局

    对象的内存布局: 第-个8个字节存储类相关的信息表的地址, 第二个8个存储引用计数相关的信息表的地址 后面开始存储...

  • java 内存布局

    Java 内存的布局主要是统计Java对象占用内存的大小。 Java对象的内存布局:对象头(Header)、实例数...

  • 一文详解 NSObject 对象的内存布局

    一文详解 NSObject 对象的内存布局一文详解 NSObject 对象的内存布局

  • Java对象

    Java对象的内存布局?对象的访问?new对象的过程? 一、Java对象的内存布局 对象的创建过程就是在堆上分配实...

  • JVM(七)内存与垃圾回收|对象的实例化内存布局与访问定位+直接

    本文主要讲对象相关(对象实例化、内存布局、访问定位)和直接内存相关的内容。 目录 1 对象的实例化内存布局与访问定...

  • iOS 内存管理

    一.内存布局以及结构 1.1内存布局 1.2内存管理方案 内存管理方案有3种:TaggedPointer (小对象...

  • 对象的内存布局

    对象的内存布局 在Hotspot虚拟机中,对象在内存中的布局可以分为三块区域: 对象头(Header)、实例数据(...

  • JAVA运行时—内存分配情况

    对象的内存布局 在HotSpot虚拟机中,对象在内存中存储的布局可以分为3块区域:对象头(Header)、实例数据...

  • Java对象的内存布局以及访问方式

    对象的内存布局 在HotSpot虚拟机中,对象的内存中的布局可以分为3块区域:对象头,实例数据和对齐填充。 对象头...

  • 对象内存布局

    类的内存布局 看下面的程序中,输出的结果会是what? 运行结果 分析 Inside C++ Object Mod...

网友评论

      本文标题:Swift-对象内存布局

      本文链接:https://www.haomeiwen.com/subject/eqjvgktx.html