swift的结构体与类

结构体和类的本质区别
结构体是值类型(枚举也是值类型),类是引用类型(指针类型)
class Size {
var width = 1
var height = 2
}

struct Point {
var x = 3
var y = 4
}

func test() {
var size = Size()
var point = Point()
}

在这里插入图片描述
在这里插入图片描述
函数调用像size和point这两个变量它的内存在哪里呢,结构体point是值类型特点,值类型是在函数中创建的那么他的内容就在栈空间中,值类型Point中有x,y所以加起来是16个字节,假设内存地址0x10000是point这个变量的起始地址,那么从0x10000开始占用16个字节而且现在一个单元格是8个字节,因为Point是结构体是值类型,所以它在函数中创建的话Point就是再栈空间而且是连续的16个字节的栈空间就是Point这个结构体的内存由于初始化完point结构体的内存地址为0x10000连续的16个字节是point结构体的内存0x10000-0x10008同时0x10000也是point中x的内存地址,0x10008也是y的内存地址,然而size中由于size是类,类的话是引用类型,也就是指针类型,size的本质是指针变量,指针变量在64位环境中占8个字节所以假设size这个指针变量地址,size这个指针变量内存在栈空间,在栈空间中有8个字节是给size做指针变量的内存地址为0x10010,从这个地址开始的8个字节就是指针变量的内存,那么指针变量里面放的是size对象的内存地址,假设size这个指针变量的8个字节假设里面放的是0x90000那么0x90000是真正的size对象的内存地址那么这个对象是在堆空间,堆空间size类占用多大的内存虽然size只有两个成员,但实际上如果要在堆空间分配内存放size对象的话,要分配32个字节,假设在堆空间size这个对象的首地址0x90000那么它的地址值是存储在size变量的内存中的,也就是size是个指针变量它在栈空间占8个字节,这个指针变量存储的地址值就是0x90000就是真正的堆空间size对象的地址.所以栈空间的0x90000指向堆空间的这个size对象,其中前面16个字节其他用处,后面的16个字节存储成员变量.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值