美文网首页
内存分配

内存分配

作者: Ray_lawq | 来源:发表于2019-05-20 15:07 被阅读0次

让我们先看一下他们的内存分部情况:

1、代码区:用来存放函数的二进制代码,在运行时要防止被非法修改,只允许读取不允许操作
2、常量区:存储常量
3、静态区(0x1):(比如static声明的变量,在程序编译的时候分配内存,直到结束的时候才释放,内存中只会有一份)
数据区:存放程序静态分配的变量和全局变量
BSS:包含了程序中未初始化全局变量
4、堆(0x6):由程序员分配和释放,存放进程运行中被动态分配的内存段,可大可小,根据存储的多少来调节大小。调用alloc等分配内存时,新分配的内存就被动态添加到堆上(堆被扩张);当利用realse释放内存时,被释放的内存从堆中被踢除(堆被缩减),因为我们现在iOS基本都使用ARC来管理对象,所以不用我们程序员来管理,但是我们要知道这个对象存储的位置
5、栈(0x7):栈是由编译器自动分配并释放,用来存放函数括弧“{}”中定义的变量。当函数被调用时,函数带有的参数也会被压入发起调用的进程栈中,待到调用结束后,函数的返回值也回被存放回栈中。由于栈的先进先出特点,所以栈特别方便用来保存/恢复调用现场。可以把栈看成一个临时数据寄存、交换的内存区

int num = 1;//数据区(全局区/静态区)
NSString str;//BSS区(全局区/静态区)
static NSString str2 = @"string";//静态区(静态初始化区/全局区)

- (void)viewDidLoad {
    [super viewDidLoad];
    int age;//栈
    NSString name = @"xiaoming";//栈
    NSString number = @"123";//123在常量区,number在栈上

    //分配而来的8字节的区域就在堆中(相当于alloc分配内存),array在栈中,指向堆区的地址
    NSMutableArray *array = [NSMutableArray arrayWithCapacity:1];
}

参考地址:
https://blog.csdn.net/youngkehpu/article/details/56282885

https://blog.csdn.net/yangle4695/article/details/52153143

相关文章

  • 《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、内存分配完后,内存...

  • C语言内存分配(重)

    内存分配的类型: 静态内存分配: 全局变量、静态全局变量、静态局部变量; 静态内存分配是在程序编译时分配的内存空间...

网友评论

      本文标题:内存分配

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