【数媒在线课堂】剖析对象在内存中的存储

【数媒在线课堂】剖析对象在内存中的存储

对象在内存中的存储

  • 栈、堆、BSS、数据段、代码段是什么?
  • 栈(stack):又称作堆栈,用来存储程序的局部变量(但不包括 static 声明的变量,static 修饰的数据存放于数据段中)。除此之外,在函数被调用时,栈用来传递参数和返回值。
  • 堆(heap):用于存储程序运行中被动态分配的内存段,它的大小并不固定,可动态的扩张和缩减。操作函数 (malloc/free)
  • BSS 段(bss segment):通常用来存储程序中未被初始化的全局变量和静态变量的一块内存区域。BSS 是英文 Block Started by Symbol 的简称。BSS 段输入静态内存分配
  • 数据段(data segment):通常用来存储程序中已被初始化的全局变量和静态变量和字符串的一块内存区域
  • 代码段(code segment):通常是指用来存储程序可执行代码的一块内存区域。这部分区域的大小在程序运行前就已经确定,并且内存区域通常属于只读,某些架构也允许代码段为可写,即允许修改程序。在代码段中,也有可能包含一些只读的常数变量,例如字符串常量。
  • new 底层做的事情:
  • 在堆内存中申请 1 块合适大小的空间
  • 在这块内存上根据类模版创建对象。类模版中定义了什么属性就依次把这些属性声明在对象中;对象中还存在一个属性叫做 isa,是一个指针,指向对象所属的类在代码段中地址
  • 初始化对象的属性。这里初始化有几个原则:a、如果属性的数据类型是基本数据类型则赋值为 0;b、如果属性的数据类型是 C 语言的指针类型则赋值为 NULL;c、如果属性的数据类型为 OC 的指针类型则赋值为 nil。
  • 返回堆空间上对象的地址
  • 注意
  • 对象只有属性,没有方法。包括类本身的属性和一个指向代码段中的类 isa 指针
  • 如何访问对象的属性?指针名 -> 属性名;本质:根据指针名找到指针指向的对象,再根据属性名查找来访问对象的属性值
  • 如何调用方法?[指针名 方法]; 本质:根据指针名找到指针指向的对象,再发现对象需要调用方法,再通过对象的 isa 指针找到代码段中的类,再调用类里面方法
  • 为什么不把方法存储在对象中?
  • 因为以类为模版创建的对象只有属性可能不相同,而方法相同,如果堆区的对象里面也保存方法的话就会很重复,浪费了堆空间,因此将方法存储与代码段
  • 所以一个类创建的 n 个对象的 isa 指针的地址值都相同,都指向代码段中的类地址

特别声明:[【数媒在线课堂】剖析对象在内存中的存储] 该文观点仅代表作者本人,今日霍州系信息发布平台,霍州网仅提供信息存储空间服务。

猜你喜欢

德云社尊重传统文化,郭德纲未曾提及,拜师仪式非海清之事(德云社传承)

德云社延续了相声拜师的传统,这不仅是对文化根基的尊重,更是展现了继承的意义。于谦的师父石富宽尚在人世,并且他不仅承认与于谦的师徒关系,还以此引以为傲。 更有人提到,郭德纲曾口出“没有拜师仪式,师徒关系就不成立…

德云社尊重传统文化,郭德纲未曾提及,拜师仪式非海清之事(德云社传承)

细胞胶囊指纹式护肤,肌肤的需求也藏着专属密码(细胞指纹图谱)

当别人都在说“这款面霜全网爆卖”“那支精华谁用都夸”时,你是不是也曾对着梳妆台上的瓶瓶罐罐犯愁,明明跟风买了热门款,肌肤却总像在闹小脾气,时而干燥起皮,时而冒几颗豆,原来,护肤从来不是千人一面的复制粘贴跟风,…

细胞胶囊指纹式护肤,肌肤的需求也藏着专属密码(细胞指纹图谱)

“AI+固态”从蓝海愿景变为刚性需求,消费电池老将转身狂奔

同时,豪鹏科技对现有产线进行设备升级,潼湖工业园已建成方形钢壳叠片专线用于匹配AI端侧设备的量产需求,同时对原有产线进行适配升级,使其能够兼容高硅电池与部分固态体系的柔性生产。7月豪鹏科技披露,公司已推出基…

“AI+固态”从蓝海愿景变为刚性需求,消费电池老将转身狂奔

佩林卡:想打造更年轻的湖人队 阵容升级进行时(佩林卡百科)

湖人篮球运营总裁佩林卡出席了东契奇的续约发布会,并谈到了湖人在休赛期引进的新援。他表示,新援是整个阵容的核心部分。在与东契奇的交流中,湖人非常重视拥有一个有抢篮板能力并且能够接空接球的中锋,因此得到艾顿意义重大

佩林卡:想打造更年轻的湖人队 阵容升级进行时(佩林卡百科)

高强度冷镦钢线材(高强度冷镦钢线图片)

为了提高强度,通常会增加合金元素含量,如铬、钼、锰等,但这也可能导致钢材的脆性增加,降低加工性能。通过科学的材料设计、先进的热处理工艺、精密的设备模具技术以及智能制造手段的综合应用,可以有效提升产品质量和生产…

高强度冷镦钢线材(高强度冷镦钢线图片)