当前位置:主页 > www.878365365.com >

堆和堆栈有什么区别?

时间:2019-11-07 09:18   www.878365365.com  

首先,描述的堆和堆栈是内存中的堆和堆栈区域。由于OC语言是C语言的超集,因此有助于理解C语言内存模型中的内存管理。
C语言内存模型分为五个区域:堆栈区域,动态存储区域,静态区域,常量区域和代码区域。
每个区中存储的内容如下。
1.堆栈区域:编译器自动分配和释放存储功能参数值和局部变量。通常它们在函数执行后被释放。操作模式类似于数据结构中堆栈的模式。
堆栈内存分配操作已集成到CPU指令集中,并且效率很高,但是分配的内存量有限。例如,iOS堆栈区域的大小为2M。
2,动态存储区:由new,malloc,realloc分配的内存块。编译器不负责启动工作。必须使用程序区域将其释放。
分配类似于数据结构中的链表。
iOS开发中提到的内存丢失是动态存储空间内存。
3,静态区域:全局变量和静态变量(iOS上局部变量或全局全局变量在iOS上静态更改)存储放在块中,初始化全局变量和区域静态变量,初始化未初始化的全局变量未初始化的静态变量位于不同的相邻区域中。
程序结束后由系统启动。
4.常量区域:常量存储在此处,不能更改。
5.代码区:存储功能体的二进制代码。
桩与桩之间的区别:
1,动态内存的存储空间是动态分配的,一般需要手动存储对象和空闲内存。
当然,在iOS引入ARC(自动参考计数管理)之后,程序员无需使用代码来管理对象内存。在进行MRC(手动内存管理)之前,程序员必须手动释放对象。
而且,ARC只是中间级技术。尽管在ARC模式下,程序员不需要像以前那样管理内存,但是他们必须遵循ARC技术规范操作,例如使用弱,强,辅助属性修饰符。
因此,如果程序员不遵循ARC规则并合理地使用这些属性修饰符,则也会发生内存丢失。
2.堆栈空间的内存由系统自动分配,并且通常存储局部变量(例如对象地址),因此程序员无需管理此内存例如,函数中局部变量的范围(此函数完成时将退出)。
这些已经在系统级别受到限制。程序员只需要在此限制下对程序进行编程。它没有赋予程序员管理内存的权利。程序员管理它当然不存在。
应用大小:
绒头空间相对较小。
动态存储比较大。
从数据存储角度来看:
基本数据类型和对象地址通常存储在堆栈空间中。
通常,动态存储空间包含对象本身,块副本等。