对象在内存中是如何存储的(内存五大区域和类加载)
/*
先了解下内存五大区域和类加载
1.内存中的五大区域
栈---局部变量,当局部变量的作用域,被执行完毕之后,这个局部变量就会被系统立即回收
堆---程序猿手动申请的字节空间,Malloc calloc realloc
BBS段----未被初始化的全局变量和静态变量 一般初始化就回收,并转存到数据段中
数据段(常量区)----已经被初始化的全局静态变量常量数据,知道程序结束的时候才会被回收
代码段----存储代码,存储程序的代码
2.类加载
a。在创建的时候,肯定是需要访问类的
b。声明一个类的指针变量也会访问类的
在程序运行期间,当某个类第一次被访问到的时候,会将这个类存储到内存中的代码段区域,这个过程,叫做类加载
只有类第一次被访问的时候,才会做类加载。一旦类被加载到代码以后,知道程序结束以后,才会被释放。
如图---
内存当中,在内存中究竟是如何存储的
假设这个代码写在函数中
Person *p1 = [Person new];
a--- Person *p1 会在栈的内存中申请一块空间,是Person类型的指针变量p1.所以这个p1是个指针变量,只能存储地址
如图2
[Person new]; 真正在内存中创建代码的是这一句
1.在堆内存中申请合适的空间,在空间中,根据类的模板,创建对象。
2.类模板中定义了什么属性,就把这些属性声明再这些对象之中
对象还有个属性叫做isa,是一个指针,指向对象属性的类,再代码中的地址。
3.初始化对象的属性
如果属性的类型是基本数据类型,那么就是赋值0
如果属性是C语言中的指针类型,那么就是NULL
如果属性是OC语言中的,那么是nil
4.返回对象的地址
注意:对象中只有属性,没有方法,自己类的属性,外加一个isa指针,指向代码段中的类。
如何访问对象的属性:指针名字->属性名(根据指针,找到指针指向的对象,再找到对象中的属性来访问)
如何调用方法:现根据指针的找到对象,对象发现要调用方法,在分局对象的isa指针找到类,然后调用类里面的方法
为什么不把方法存储在对象之中:因为一个对象的方法代码实现是一模一样,就没必要为每个对象保存一个方法,这样提浪费空间,所以只保留1分就行了
p1 p2 的isa 指针是相同的
*/
#import <Foundation/Foundation.h>
@interface Person : NSObject
{
@public
NSString *_name;
int _age;
}
-(void)sayHI;
@end
@implementation Person
-(void)sayHI
{
NSLog(@"嘀嘀嘀,开车了");
}
@end
int main(int argc,const char * argv[]) {
@autoreleasepool {
Person *p1 = [Personnew];
Person *p2 = [Person new];
p1->_age =18;
NSLog(@"p1==%p",p1);
[p1 sayHI];
NSLog(@"Hello, World!");
}
return0;
}
对象在内存中是如何存储的(内存五大区域和类加载)相关推荐
- 类和对象在JVM中是如何存储的,竟然有一半人回答不上来!
前言 这篇博客主要来说说类与对象在JVM中是如何存储的,由于JVM是个非常庞大的课题,所以我会把他分成很多章节来细细阐述,具体的数量还没有决定,当然这不重要,重点在于是否可以在文章中学到东西,是否对J ...
- 转载——C语言中float,double类型,在内存中的结构(存储方式)
最近在做一个数据格式分析和转换的项目,第一次接触底层的二进制代码存储,看的一头雾水,看到这个帖子后对于在Windows系统下数据的存储方式有了更多的了解,将原文分享一下: 原文地址为http://ww ...
- @清晰掉 C++ 中的 enum 结构在内存中是怎么存储的?
C++ 中的 enum 结构在内存中是怎么存储的? C++ C++ 中的 enum 结构在内存中是怎么存储的?里面存储的是常量值吗? 关于占用内存的大小,enum类型本身是不占内存的,编译器直接替换 ...
- 常见数据结构在内存中是怎么存储的
三人行,必有吾师,欢迎加入星球,一起讨论技术点滴 前言: 在开发中,经常用到数组,ArrayList,HashMap等,他们在内存中是怎么存储的呢? 其实在他们在申请内存时,要么是一块连续的内存,要么 ...
- C语言学习(十一)小数在内存中是如何存储的?定点数与浮点数各自的优势在哪?规格化浮点数与非规格化浮点数又表示什么?
C语言学习(十一)小数在内存中是如何存储的?定点数与浮点数各自的优势在哪?规格化浮点数与非规格化浮点数又表示什么? 浮点数与定点数 小数在内存中以浮点数形式存储.浮点数并不是一种数值分类,他和整数.小 ...
- 计算机中小数如何储存,小数在内存中是如何存储的?
小数在内存中是如何存储的? 文本关键字:小数.float.double.浮点数.精度 一.IEEE 754(二进制浮点数算术标准) 在学习进制转换时,我们了解到:我们经常使用的十进制数是转换为二进制进 ...
- java内存中读文件_关于内存管理:读取Java中的大文件
我需要一个非常了解Java和内存问题的人的建议. 我有一个大文件(大约1.5GB),我需要将此文件切成许多小文件(例如100个小文件). 我通常知道如何做到这一点(使用BufferedReader), ...
- 对象在内存中是如何存储的
内存五大区域 栈---局部变量,当局部变量的作用域,被执行完毕之后,这个局部变量就会被系统立即回收 堆---程序猿手动申请的字节空间,Malloc calloc realloc BBS段----未被初 ...
- C语言中float,double类型,在内存中的结构(存储方式).
从存储结构和算法上来讲,double和float是一样的,不一样的地方仅仅是float是32位的,double是64位的,所以double能存储更高的精度. 任何数据在内存中都是以二进制(0或1)顺序 ...
最新文章
- 编程题:两个数比较大小,之后用变量t互换。
- 网络嗅探与欺骗(FTP部分)
- C 语言的实际运用 ---150809124
- css3制作炫酷导航栏效果 转
- CSS Hack 汇总速查一览
- java多线程系列13 设计模式 Future 模式
- linux 安装qt 4.6软件,QT学习之一:Linux下安装QT之版本qt-4.6.3
- linux gst-launch 播放视频旋转,【视频开发】Gstreamer中一些gst-launch常用命令
- 贪 心 学用markdown
- 工作资讯002---FaaS和PaaS的关系_Iaas_Paas_Saas
- 计算机辅助设计与图像学学报 改后发表,几种常见图像二值化方法的结果对比与分析...
- 基于TI DRV8424驱动步进电机实现调速和行程控制
- IE主页被2345(782782)篡改解决办法
- BlackBerry Internet Service故障:公司内部同事无法互通邮件,对外联络没有问题
- clustalw序列比对_几个多序列比对软件:Muscle,ClustalW和T
- nagios监控华为5700交换机
- 蛙蛙推荐:蛙蛙牌关键词提取算法
- 计算时间复杂度--(简单版)
- 优秀的 DevOps Pro 需具备的7种基本软技能
- 逆战班---《JS操作汉字时钟详解》