堆和栈

作者: 世玉茹花 | 来源:发表于2017-08-15 15:50 被阅读16次



按管理方式看:oc对象存放于堆里面(堆内存需要程序员手动回收)

非oc对象一般放在栈里面(栈内存会被系统自动回收)

按分配方式分:堆是动态和回收内存的,没有静态分配的堆。

栈有静态分配和动态分配两种,静态分配由系统编译器完成,比如局部变量分配。动态分配是有alloc函数进行分配,它的动态分配也是由系统编译器进行释放,不需要程序员手动管理。

扩展:oc中nsstring的内存存储方式:

NSString* name = @"zhangsan"去定义,属于常量类型,程序会把这部分数据放到全局变量存储区,你不用释放,你也释放不掉,不信你可以release以后再查看它的retainCount;

[[NSString alloc] ] initWithFormat:@"%@ %@",firstname,secondname];这种类型的需要释放,因为alloc过了,程序需要手动用release释放,你写的那种方法不正确,没有直接init的。

[NSString stringWithFormat:@"%@ %@",firstname,secondname];这种类型生成的NSString是autorelease类型的变量,不需要释放,程序一次runLoop结束后就会释放。你不能用release释放。

初始化字符串的时候,直接赋值 @"abc",stringWithString ,alloc  initWithString这三种方法中,@"abc"  存放在常量池。重复赋值,不会重新分配内存空间。

注意:常量区的引用计数是lu的最大值。

stringWithFormat  alloc  initWithFormat ,存放的地址为堆区。    NSString 不需要我们进行内存管理,Foundation框架会自动帮我们管理。

相关文章

  • 10.11java中的堆和栈

    java高级-堆和栈 java堆 /栈 栈内存 / 堆内存的区别 1. java堆 /栈 2. 栈内存 / 堆内存的区别

  • 堆和栈

    一 java 堆内存和栈内存 java把内存分为两种:一种是堆内存,一种是栈内存 堆: 堆内存主要存储实例化对象,...

  • 堆和栈

    栈区(stack)由编译器自动分配释放 ,存放方法(函数)的参数值, 局部变量的值等,栈是向低地址扩展的数据结构,...

  • 堆和栈

    堆和栈在内存地址空间中的位置是不一样的,堆向上增长,而栈向下增长;其次,他们的功能也不一样,堆中的空间程序员可以自...

  • 堆和栈

    基本要点 基本数据类型、局部变量都是存放在栈内存中的,用完就消失了。new创建的实例化对象及数组,是放在堆内存中的...

  • 堆和栈

     按管理方式看:oc对象存放于堆里面(堆内存需要程序员手动回收) 非oc对象一般放在栈里面(栈内存会被系统自...

  • 堆和栈

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

  • 堆和栈

    问题描述 编程语言书籍中经常解释值类型被创建在栈上,引用类型被创建在堆上,但是并没有本质上解释这堆和栈是什么。我仅...

  • 堆和栈

    在数据结构中堆和栈都是一种数据项按序排列的数据结构,但我们今天所说的重点并不是数据结构中的堆和栈,而是C语言内存分...

  • 堆和栈

网友评论

      本文标题:堆和栈

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