美文网首页
谈谈内存分配

谈谈内存分配

作者: 二猪哥 | 来源:发表于2019-02-28 17:20 被阅读0次
我们先看看这张图: 内存五大区.png

内存分区:

iOS中主要是栈区(stack)、堆区(heap)、全局区/静态区(staic) 、常量区、代码区;

一、栈区

  • 存放局部变量(临时变量),先进后出,一旦出了作用域就会被销毁,函数跳转地址,现场保护等。
  • 程序猿不需要管理栈区变量的内存;
  • 栈区的地址从高到低分配。

二、堆区

  • 堆区的内存分配使用的是alloc;
  • 堆区的地址是从低到高分配;
  • ARC原理是基于堆区,编译器在编译的时候给对象自动添加retain,release,autorelease;
  • 在ios中,堆区的内存是应用程序共享的,堆中的内存分配是系统负责的;

三、全局区/静态区(static):

包括两个部分:未初始化过 、初始化过;
也就是说,(全局区/静态区)在内存中是放在一起的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域;
eg:int a;未初始化的。int a = 10;已初始化的。

四、常量区

  • 常量字符串就是放在这里,还有const常量。

五、代码区

存放App代码。

注意

  • 堆区需要程序猿管理内存,是由alloc分配的内存,一般速度比较慢,容易产生内存碎片;
  • 栈区不需要程序猿管理内存,由编译器自动分配并释放,速度快;
  • 当一个app启动后,代码区,常量区,全局区大小都是已经固定的,因此指向这些区的指针不会产生崩溃性的错误,而堆区和栈区是时时刻刻变化的(堆得创建和销毁,栈的弹入和弹出),所以当使用一个指针指向这个2区里面内存的时候,一定要注意内存是否已经被释放,否则会产生程序崩溃(即野指针报错)

相关文章

  • 谈谈内存分配

    内存分区: iOS中主要是栈区(stack)、堆区(heap)、全局区/静态区(staic) 、常量区、代码区; ...

  • 《C语言》malloc函数使用

    动态分配、静态分配 静态分配:计算机随机自动分配内存,周期结束后自动释放内存动态分配:手动分配内存,手动释放内存 ...

  • (二)C语言之动态内存分配

    (二)C语言之动态内存分配 一、静态内存分配 定义是指定分配的内存长度就是静态内存分配,是在栈内存中分配 二、C语...

  • javascript内存管理

    内存声明周期 分配你所需要的内存 使用分配的内存(读写) 不再需要时释放内存 内存分配 javascript在声明...

  • docker 的资源分配

    内存分配 -m 或者--memory :分配内存--memory-swap:分配临时内存docker run -i...

  • Java中四种引用

    Java内存管理包括内存分配和内存回收。 内存分配:程序员通过new对象,JVM会自动为该对象分配内存。 内存回收...

  • Java编程语言:java中四种引用!欢迎补充

    Java内存管理包括内存分配和内存回收。 内存分配:程序员通过new对象,JVM会自动为该对象分配内存。 内存回收...

  • 回顾JVM内存分配

    回顾JVM内存分配回顾JVM内存分配

  • 探索iOS内存分配

    探索iOS内存分配 探索iOS内存分配

  • 内存管理:部分基础知识

    一、内存分区二、常用数据类型占用内存大小三、给对象分配内存 1、给结构体分配内存及内存对齐 2、内存分配完后,内存...

网友评论

      本文标题:谈谈内存分配

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