面试集锦--堆与栈的区别
来源:互联网 发布:code.org软件 编辑:程序博客网 时间:2024/04/29 19:17
1、在申请方式上的不同:栈是系统自动分配的,使用完后系统自动删除。堆是手动分配,使用完后手动删除。
2、系统响应的不同:只要栈的剩余空间大于所申请的空间,系统就会为程序提供内存,否则系统提示栈溢出错误。
但是系统收到堆申请空间,系统会遍历用于记录空闲内存的链表,直到找到满足大小的内存空间,,当找到后,系统就从内存空闲链表中删除,将该段内存分配给堆,同时在该段内存中的首地址处标记堆的大小。如果这段内存没有被堆使用完,则剩余的空间再加到空闲链表中。
3、空间大小的不同:在windows下栈是一块连续的区域,大小事2M或其他。总之该数值在编译时就是一个确定的常数。加入申请的栈内存过大,就会导致栈溢出,不能指望栈能分配更多的内存。而堆是不连续的内存区域,堆的大小是由系统中虚拟内存来决定的。
4、执行效率的不同:栈是自动分配,效率快。堆是手动分配效率慢,而且容易产生内存碎片。
5、申请空间命名方式不同:栈是有名分配,可以用其名字来访问,堆是匿名分配,只能用指针访问。
6、函数调用方式不同:在栈中被调用函数的下一行先进栈,然后是从右往左参数进栈,然后是局部变量进栈。然后按照先进后出的原则依次出栈并处理数据。
在堆中内存区域不连续,因此在使用时必须由程序员来安排。
- 面试集锦--堆与栈的区别
- 面试-堆和栈的区别
- 堆与栈的区别
- 堆与栈的区别
- 堆与栈的区别
- 堆与栈的区别
- 堆与栈的区别
- 栈 与 堆 的区别
- 堆与栈的区别
- 栈与堆的区别
- 堆与栈的区别
- 堆与栈的区别
- 堆与栈的区别
- 栈与堆的区别
- 堆与栈的区别
- 堆与栈的区别
- 堆与栈的区别
- 堆与栈的区别
- Android requires compiler compliance level 5.0 or 6.0. Found '1.7' instead. Please use Android Tools
- POM记录
- 数据库学习笔记
- 按表的记录数大小排序
- preg_match函数详解[wei静态充电]
- 面试集锦--堆与栈的区别
- request内置对象---参数传递
- MySQL学习笔记
- Android数据存储(二)File 数据内部存储
- 编译器、连接器学习笔记--(二)--编译
- [SGU]105. Div 3
- windows Internet Explorer8 如何建立多标签
- C++ 虚函数表解析
- HTML5引领下的Web革命