美文网首页iOS专题资源__系统知识点iOS
内存分区-栈区 、 堆区、全局区、常量区、代码区

内存分区-栈区 、 堆区、全局区、常量区、代码区

作者: 没有昵称会怎样 | 来源:发表于2016-04-09 23:28 被阅读1171次

一、区域划分

一个C/C++编译的程序占用的内存分为以下几个部分

1、栈区(stack): 由编译器自动分配释放,存放函数的参数值、局部变量的值等,其操作方式类似于数据结构中的栈

2、堆区(heap):一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收,注意它与数据结构中的堆是两回事,分配方式倒是类似于链表

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

4、文字常量区:常量字符串就是存放在该区,程序结束后由系统释放

5、程序代码区:存放函数体的二进制代码

二、堆和栈

1、申请方式:

栈:遵循先进后出的规则,它的生长方向是向下的,是向着内存地址减小的方向增长,栈是系统提供的功能。特点是高效快速,缺点是有限制,数据不灵活。它是由系统自动分配的

堆:生长方向是向上的,也就是向着内存地址增加的方向,需要程序员自己申请,并指明大小,

2、申请后系统的响应:

栈:只要栈的剩余空间大于所申请的空间,系统将为程序提供内存,否则将报异常提示栈溢出

堆:首先应该操作系统有一个记录空闲内存地址的链表,当系统收到程序的申请时会遍历该链表,寻找第一个空间大于所申请空间的堆节点,然后将该结点从空闲结点链表中删除,并将该结点的空间分配给程序,另外,对于大多数系统,会在这块内存空间中的首地址处记录本次分配的大小,这样代码中的delete语句才能正确的释放本内存空间,另外由于找到的堆结点的大小不一定正好等于申请的大小,系统会自动的将多余的那部分重新放入空闲链表中

相关文章

  • 19·iOS 面试题·什么是 ARC ?(ARC 是为了解决什么

    前言 对于 iOS 内存分区有:栈区、堆区、静态区、全局区、常量区、代码区。对于静态区、全局区、常量区、代码区,对...

  • 无标题文章

    --- ##1.内存分区 > * 堆区 > * 栈区 > * 全局(静态)区 > * 文字常量区 > * 程序代码...

  • Swift--004:内存分区 & 方法调度

    内存分区 内存五大区内存分区按地址从高到低排列: 栈区->堆区->全局静态区->常量区-> 代码区栈区的地址比堆区...

  • 谈谈内存分配

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

  • 五大内存区

    一:五大内存区 说到内存分区,内存即指的是RAM。 栈区,堆区,全局区,常量区,代码区 1、栈区: 创建临时变量时...

  • iOS内存相关问题小结

    1.iOS内存 IOS 内存区主要可以划分为五个区,栈区、堆区、全局变量区、常量区、代码区。 栈区:系统负责内存管...

  • 内存分区-栈区 、 堆区、全局区、常量区、代码区

    一、区域划分 一个C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack): 由编译器自动分配释放,...

  • 动态内存分配_C语言

    逻辑上的分区 栈区 堆区 静态区 常量区 代码区 代码区,常量区,静态区,堆区,栈区这个排列顺序按照地址由小到大排...

  • 内存管理

    首先,内存分为:栈区、堆区、全局区/静态区(存放全局变量和static静态变量)、常量区(存放字符串常量)、代码区...

  • iOS 内存基础知识及堆区和栈区的区别

    iOS内存区域大致分为;栈区,堆区,全局区(静态区),文字常量区,程序代码区 栈区 栈区(stack)由编译器自动...

网友评论

    本文标题:内存分区-栈区 、 堆区、全局区、常量区、代码区

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