美文网首页
内存的几大区域

内存的几大区域

作者: FRAJ | 来源:发表于2019-05-21 15:25 被阅读0次

栈区(stack)

由编译器自动分配并释放,存放函数的参数值,局部变量等。
栈是系统数据结构,对应线程/进程是唯一的。
优点是快速高效,缺点是有限制,数据不灵活 [先进后出]

栈空间分静态分配和动态分配两种
静态分配是编译器完成的,比如自动变量(auto)的分配;
动态分配由alloca函数完成;
栈的动态分配无需释放(是自动的),也就没有释放函数。为可移植的程序起见,栈的动态分配操作是不被鼓励的。

堆区(heap)

由程序员分配和释放,如果程序员不释放,程序结束时,可能会由操作系统回收,比如在 iOS 中 alloc 都是存放在堆中,优点是灵活方便,数据适应面广泛,但是效率有一定的降低。

堆是函数库内部数据结构,不一定唯一,不同堆分配的内存无法相互操作。堆空间的分配总是动态的。

虽然程序结束时所有的数据空间都会释放回系统,但是精确的申请内存,释放内存匹配是良好程序的基本要素。

全局静态区(static)

全局变量和静态变量的存储是放在一起的,初始化的全局变量和静态变量存放在一块区域,未初始化的全局变量和静态变量在相邻的另一块区域,程序结束后由系统释放。

注意:全局区又可分为为初始化全局区、bss段和初始化全局区data段;
举例:

int a;         //未初始化的
int a = 10;    //已初始化的

文字常量区

存放常量字符串,程序结束后由系统释放;

代码区

存放函数的二进制代码

相关文章

  • 内存管理:内存布局,内存几大区域

    内存布局,内存几大区域

  • 内存

    内存的几大区域 栈内存和堆内存 所谓的栈内存和堆内存并不是内存里面有一块区域叫栈,有一块区域叫堆.所谓的栈内存和对...

  • 内存的几大区域

    (以下内容为转载自-csdn-z040145) 1.栈区(stack) 由编译器自动分配并释放,存放函数的参数值,...

  • 内存的几大区域

    栈区(stack) 由编译器自动分配并释放,存放函数的参数值,局部变量等。栈是系统数据结构,对应线程/进程是唯一的...

  • iOS知识点

    1、内存的几大区域 iOS的内存分布区域大致分为:栈区(stack)、堆区(heap)和全局静态区(static)...

  • iOS底层原理 - 内存管理 之 内存布局

    面试题引发的思考: Q: 内存的几大区域? 按照内存地址由低到高分配依次为以下区域:预留区域、代码段、数据段、堆、...

  • iOS学习-OC内存管理

    一、内存 1、什么是内存? ios所讲的内存也就是RAM:运行内存 2、内存的几大区域 各个区的作用: 栈区:编译...

  • iOS内存的几大区域

    介绍下内存的几大区域 1.栈区(stack) 由编译器自动分配并释放,存放函数的参数值,局部变量等。栈是系统数据结...

  • iOS 内存的几大区域

    参考文章 堆和栈的区别(转过无数次的文章) 几大区域简介 栈区(stack):由编译器管理(分配释放)存放函数参数...

  • iOS 内存的几大区域

    介绍下内存的几大区域 1.栈区(stack) 由编译器自动分配并释放,存放函数的参数值,局部变量等。栈是系统数据结...

网友评论

      本文标题:内存的几大区域

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