1.内存中的五大区域
我们先来了解内存中的五大区域,分别用来干什么的。
栈 存储局部变量。
堆 程序员手动申请的字节空间malloc calloc realloc函数。
BSS段 存储未被初始化的全局变量静态变量。
数据段(常量区) 存储已被初始化的全局静态安量常量数据。
代码段 存储代码.存储程序的代码。
2.类加载
我们在什么时候需要访问类呢?
1).在创建对象的时候肯定是需要访问类的。
2).声明1个类的指针变量也会访问类的。
在程序运行期间当某个类第1次被访问到的时候。会将这个类存储到内存中的代码段区域,这个过程叫做类加载。
注意的是只有类在第1次被访问的时候,才会做类加载。
一旦类被加载到代码段以后。直到程序结束的时候才会被释放。
3.对象在内存中究竟是如何存储的
我们先来看下面的代码
Person *p1 = [Person new] :
经过前面的学习,相信大家都应该知道了,这句代码的意思就是实例化一个对象。那么他是如何在内存中实现的呢?
首先Person *p1:会在栈内存中申请1块空间。在栈内存中声明1个Person类型的指针变量p1。p1是1个指针变量,那么只能存储地址。
再来看[Person new]:真正在内存中创建对象的其实是这句代码。