美文网首页
计算机程序内存分布(栈、堆、BSS、数据区、代码段)

计算机程序内存分布(栈、堆、BSS、数据区、代码段)

作者: 未来小文学家 | 来源:发表于2021-09-25 11:25 被阅读0次

一、存储器

RAM: 随机存取存储器(random access memory)又称作“随机存储器”,是与CPU直接交换数据的内部存储器,也叫主存(内存)。它可以随时读写,而且速度很快,通常作为操作系统或其他正在运行中的程序的临时数据存储媒介。存储单元的内容可按需随意取出或存入,且存取的速度与存储单元的位置无关的存储器。这种存储器在断电时将丢失其存储内容,故主要用于存储短时间使用的程序

ROM: 只读存储器(Read-Only Memory),是一种只能读出事先所存数据的固态半导体存储器。其特性是一旦储存资料就无法再将之改变或删除。通常用在不需经常变更资料的电子或电脑系统中,并且资料不会因为电源关闭而消失,CPU是不能直接访问的,而是需要文件系统/驱动程序(嵌入式中的EMC)将其读到RAM里面,CPU才可以访问。

看一下CPU、RAM、ROM之间的关系图

image

CPU、RAM、ROM.png

二、程序(App)启动运行

App安装到手机后,存储在ROM中,程序启动后,系统会把App程序从ROM里面拷贝到RAM,然后从RAM里面执行代码。

三、RAM内存分布

RAM内存中分5个区

栈区(stack):

存放的局部变量、函数的参数值、函数跳转地址

先进后出,一旦出了作用域就会被销毁

栈区地址从高到低分配

自动管理内存

堆区(heap):

堆区的内存分配使用的是alloc;

ARC的内存的管理,是编译器再便宜的时候自动添加 retain、release、autorelease;

堆区的地址是从低到高分配)

需要程序猿管理内存;

全局区/静态区(static):

存放全局变量和静态变量(未初始化过 、初始化过)

初始化的全局变量和静态变量存放在一块区域,未初始化的全局变量和静态变量在相邻的另一块区域

程序结束后由系统释放

常量区:常量字符串就是放在这里;

存放常量字符串

程序结束后由系统释放

代码区:

存放App代码

程序结束后由系统释放

image

image.png

import "ViewController.h"

@interface ViewController ()

@end

NSInteger a = 10; //全局初始化区

NSArray *array; //全局未初始化区

@implementation ViewController

  • (void)viewDidLoad {

//UIView *subView 指针存在栈区, [[UIView alloc] init] 对象保存在堆区

UIView *subView = [[UIView alloc] init];

NSString *string = @"8888"; // string存在栈上, @"8888" 在常量区。

static NSInteger count = 0; // 全局(静态)初始化区, 0 在常量区

}

@end

四、注意事项:

1.栈区中的变量由编译器负责分配和释放,内存随着函数的运行分配,随着函数的结束而释放,由系统自动完成。只要栈的剩余空间大于所申请空间,系统将为程序提供内存,否则将报异常提示栈溢出

2.当App启动后,代码区,常量区,全局区大小已固定,而堆区和栈区是时时刻刻变化的(堆的创建销毁,栈的弹入弹出),所以当使用一个指针指向这两个区里面的内存时,一定要注意内存是否已经被释放,否则会产生程序崩溃。

相关文章

  • 内存管理分区

    内存分配有三种方式:静态存储区域分配(代码段、数据段、BSS段)、堆、栈 内存分为5个区 代码段:存放程序执行代码...

  • 内存管理

    内存分布: 内存地址从小到大,其中栈是从大到小分布代码区,文字常量区,全局区(静态区)/数据区,BSS,堆,栈,内...

  • iOS、内存管理

    内存管理和分配 内存分为5个区域,分别指的是----->栈区/堆区/BSS段/数据段/代码段 栈:存储局部变量,当...

  • Ios面试复习--内存分配

    1.Ios框架下,内存由上到下分别为:栈区-->堆区-->BSS段-->数据区-->代码段 其中: --1.栈区:...

  • OC的五大内存区域

    栈区(stack)堆区(heap)全局区/静态区(BSS段和数据段)常量区代码区(代码段) 1、栈区 栈区:又称堆...

  • iOS的内存5大区

    1. 内存中的五大区域 内存分为5个区域,分别指的是----->栈区/堆区/BSS段/数据段/代码段 栈:存储局部...

  • iOS 内存浅解

    1.内存中的五大区域 内存分为5个区域,分别指的是----->栈区/堆区/BSS段/数据段/代码段 栈:存储局部变...

  • 计算机程序内存分布(栈、堆、BSS、数据区、代码段)

    一、存储器 RAM: 随机存取存储器(random access memory)又称作“随机存储器”,是与CPU直...

  • 在内存剖析对象

    对象在内存中的存储 栈、堆、BSS、数据段、代码段是什么?栈(stack):又称作堆栈,用来存储程序的局部变量(但...

  • 底层25:内存管理-内存布局/Tagged Pointer

    iOS程序的内存布局 由低到高:代码段(__TEXT)、数据段(__DATA)、堆区、栈区、内核区。 Tagged...

网友评论

      本文标题:计算机程序内存分布(栈、堆、BSS、数据区、代码段)

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