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

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

对象在内存中的存储

  • 栈、堆、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 指针的地址值都相同,都指向代码段中的类地址

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

猜你喜欢

金蝉高端静音窗帘轨道,加厚铝合金直轨怎么选?(金蝉窗帘价格贵不贵)

想让窗帘开合如丝般顺滑却毫无噪音?金蝉高端新型静音交叉窗帘轨道凭借加厚铝合金材质与精密滚轮系统,成为家庭、办公室装修的“隐形神器”。本文深度解析其核心原理、安装方式、适用场景与选购技巧,帮你避开坑货陷阱,轻松选对高颜值又实用的窗帘轨道。适合

金蝉高端静音窗帘轨道,加厚铝合金直轨怎么选?(金蝉窗帘价格贵不贵)

白炭黑的分类和应用探究解密结构胶的密不透风之谜(白炭黑是炭黑吗)

在结构胶中使用电弧法白炭黑,能够提高结构胶的导电性能,用于电子设备的胶接或导电胶的制备。电弧法白炭黑还具有抗静电和防雷击的功能,使其在防爆合成材料等领域表现出良好的应用前景。在结构胶中添加适量的水煤泥法白炭黑…

白炭黑的分类和应用探究解密结构胶的密不透风之谜(白炭黑是炭黑吗)

酒店宾馆电视柜行李柜组合|现代简约标间全套定制桌推荐(宾馆电视柜的样式图片)

想打造高端舒适又省空间的酒店民宿标间?这款集电视柜+行李柜于一体的现代简约组合家具,专为旅馆、民宿设计!采用环保板材+隐形收纳结构,节省60%空间,承重强、颜值高。适配1.5米1.8米床型,支持尺寸与颜色定制,性价比超高。本文详解材质、

酒店宾馆电视柜行李柜组合|现代简约标间全套定制桌推荐(宾馆电视柜的样式图片)

被61岁自然老去的叶童惊艳!不染发不化浓妆,一身白色都能很优雅

这个问题现在已经成为热门话题,网友们看了叶童近期的活动造型后,纷纷表示:我希望到老的时候也能这么优雅自信! 网友热评:叶童的独特之处就在于,她完全接受了自然老去的模样。是认为叶童美丽动人,是因为她大方展现真实…

被61岁自然老去的叶童惊艳!不染发不化浓妆,一身白色都能很优雅

5部最好看的科幻动作片老片,一部比一部经典,你错过了哪部?(最好看的科幻大片有哪些)

万磁王是一个非常伟大的反派,他受够了人类对变种人的迫害,所以要以牙还牙,将所有人类都变成变种人的一员,虽然他的计划并不完善,但他的动机和理念让人深思。 这是《终结者》系列的第四部作品,也是系列中唯一一部以末…

5部最好看的科幻动作片老片,一部比一部经典,你错过了哪部?(最好看的科幻大片有哪些)