美文网首页
OC内存分区

OC内存分区

作者: 愤怒小鸟飞呀飞 | 来源:发表于2019-01-17 16:26 被阅读0次

函数调用压栈 https://zhuanlan.zhihu.com/p/27339191(操作系统,或计算机体系结构的教材会讲到)

image.png
  函数体内的局部变量存在栈上,且是连续压栈的。OC中的大量临时对象变量,存在栈上,还是堆上?
  如何判断变量在堆上存储,还是栈上存储?

iOS 内存分配 https://www.jianshu.com/p/746c747e7e00

[图片上传中...(image.png-8fe086-1547713449926-0)]


image.png

代码区:代码段是用来存放可执行文件的操作指令(存放函数的二进制代码),也就是说是它是可执行程序在内存种的镜像。代码段需要防止在运行时被非法修改,所以只准许读取操作,而不允许写入(修改)操作——它是不可写的。

全局(静态)区包含下面两个分区:
数据区:数据段用来存放可执行文件中已初始化全局变量,换句话说就是存放程序静态分配的变量和全局变量。
BSS区:BSS段包含了程序中未初始化全局变量。

常量区:常量存储区,这是一块比较特殊的存储区,他们里面存放的是常量,

堆(heap)区:堆是由程序员分配和释放,用于存放进程运行中被动态分配的内存段,它大小并不固定,可动态扩张或缩减。当进程调用alloc等函数分配内存时,新分配的内存就被动态添加到堆上(堆被扩张);当利用realse释放内存时,被释放的内存从堆中被剔除(堆被缩减),因为我们现在iOS基本都使用ARC来管理对象,所以不用我们程序员来管理,但是我们要知道这个对象存储的位置。

栈(stack)区:栈是由编译器自动分配并释放,用户存放程序临时创建的局部变量,存放函数的参数值,局部变量指针等。也就是说我们函数括弧“{}”中定义的变量(但不包括static声明的变量,static意味这在数据段中存放变量)。除此以外在函数被调用时,其参数也会被压入发起调用的进程栈中,并且待到调用结束后,函数的返回值也回被存放回栈中。由于栈的先进后出特点,所以栈特别方便用来保存/恢复调用现场。从这个意义上将我们可以把栈看成一个临时数据寄存、交换的内存区

int age = 24;//全局初始化区(数据区)
NSString *name;//全局未初始化区(BSS区)
static NSString *sName = @"Dely";//全局(静态初始化)区

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    int tmpAge;//栈
    NSString *tmpName = @"Dely";//栈
    NSString *number = @"123456"; //123456\\\\0在常量区,number在栈上。
    NSMutableArray *array = [NSMutableArray arrayWithCapacity:1];//分配而来的8字节的区域就在堆中,array在栈中,指向堆区的地址
    NSInteger total = [self getTotalNumber:1 number2:1];

}

- (NSInteger)getTotalNumber:(NSInteger)number1 number2:(NSInteger)number2{
    return number1 + number2;//number1和number2 栈区
}


@end

相关文章

  • 内存管理

    目录一、内存分区 1、RAM和ROM 2、内存的五大分区二、内存管理 1、OC内存管理是指什么?OC内存管理的本质...

  • OC内存分区

    函数调用压栈 https://zhuanlan.zhihu.com/p/27339191(操作系统,或计算机体系结...

  • OC内存管理-内存分区、TaggedPointer

    一、内存布局 1.1 内存分区 栈区:存储函数、方法、指针、局部变量、参数等(访问速度快,通过寄存器访问),当局部...

  • 操作系统-存储管理

    为什么内存要分区?分区有哪些类型? 内存分区是为了方便地支持多程序运行。分区管理分为固定分区和可变分区,固定分区是...

  • C++运算符重载实现(加号、左移、递增、赋值、关系运算符、函数调

    先来复习一下C++的内存分区问题~ C++内存分区 C++程序的内存分区可划分为四大内存分区:堆、栈、全局/静态存...

  • extern const static

    内存分区简介 | 内存分区 | 保存内容 | 是否可读写 | 是否手动释放 ...

  • linux运维之磁盘分区方案

    不同场景的分区: 1)普通分区形式: /boot 引导分区 256Mswap 交换分区 内存大于8G,给8G。内存...

  • linux系列10-交换分区Swap

    虚拟内存提升内存的容量,防止OOM(Out of Memory) -查看当前的交换分区 -增加交换分区基本分区,L...

  • 【String类】对象内存分配详解

    关于内存分区参见:Java内存详解 - 内存分区 本文重点描述String对象创建时的内存分配方式。 字符串常量池...

  • swap分区的创建及启动关闭

    Swap分区又称为交换分区,通常是在硬盘中预留一块分区作为swap交换分区,当系统内存出现不足时,系统会将空闲内存...

网友评论

      本文标题:OC内存分区

      本文链接:https://www.haomeiwen.com/subject/aduidqtx.html