《理论篇》

《内存之储存区域与指针》

2019-06-25  本文已影响0人  不够果断是种癌

之前忙于工作对于这块没有进行过整理,现在楼主整理一下。此文仅供自我学习。

关于对指针的理解,楼主看到了这样的一句话。原话:将某个变量赋值给指针,实际上就是将这个变量的地址赋值给指针,或者反过来说,指针存储了这个变量的内存地址,指向了这个变量,通过指针就能找个这个变量。

如果当前变量的是常量那么指针的储存就在常量区,由系统进行释放。如果是全局的话那么指针的储存就在静态区,由程序结束后统一释放。如果是局部变量的话,那么指针的存储就在栈区,由系统进行释放。老说文字没有意思,我们直接看一句特别简单的代码。

这段代码用白话文的意思就是:label这个对象在我们的堆区里面申请了一块内存空间并将自身储存在了这个内存空间然后将这块内存的空间地址返回给了我们的变量,由于我们的变量是局部变量,由于涉及到了runtime的isa里面的内部结构了。我这里就不做细讲了,大家不懂的可以看看运行时也就是我们的runtime。最终这个指针储存的地方就在我们的栈区。

接下来我们谈论一下我们今天的另一个主题代码储存区域。

代码储存区域一般分为栈区,堆区,代码区,静态区,常量区

第一种我们叫做栈区,它分配的是一块连续的内存空间。如果申请空间的时候超过了就会报错。它的储存方式是后进先出的原则进行存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。栈具有记忆作用,对栈的插入与删除操作中,不需要改变栈底指针。插入一般称为进栈(PUSH),删除则称为退栈(POP)。栈也称为后进先出表。有系统自动进行管理

第二种我们叫做堆区,它分配的是一块不连续的内存空间。它的储存方式是先进先出的原则进行存储数据。这个管理需要我们手动去管理。

接下来我们看看代码数据区:用来存放函数的二进制代码,在运行时要防止被非法修改,只允许读取不允许操作。

接下来我们看看静态区:程序静态区和全局区是在一起的,由程序结束后统一释放。

常量区:存放一些我们定义的常量也是由程序后统一释放。

上一篇下一篇

猜你喜欢

热点阅读