C++内存分配
2015-08-22 10:54
351 查看
C++内存分配中说法错误的是:______。
对于栈来讲,生长方向是向上的,也就是向着内存地址增加的方向
对于堆,大量的 new/delete 操作会造成内存空间的不连续
堆容易产生 memory leak
堆的效率比栈要低得多
栈变量引用容易逃逸
以上都对
答案: A
A 堆的生长方向向上,栈向下 ;EBP 栈基址大,生长向着内存地址减少的方向。
栈:在Windows下,栈是向低地址扩展的数据结构,是一块连续的内存的区域。这句话的意思是栈顶的地址和栈的最大容量是系统预先规定好的,在WINDOWS下,栈的大小是2M(也有的说是1M,总之是一个编译时就确定的常数),如果申请的空间超过栈的剩余空间时,将 提示overflow。因此,能从栈获得的空间较小。
堆:堆是向高地址扩展的数据结构,是不连续的内存区域。这是由于系统是用链表来存储 的空闲内存地址的,自然是不连续的,而链表的遍历方向是由低地址向高地址。堆的大小 受限于计算机系统中有效的虚拟内存。由此可见,堆获得的空间比较灵活,也比较大。
对于栈来讲,生长方向是向上的,也就是向着内存地址增加的方向
对于堆,大量的 new/delete 操作会造成内存空间的不连续
堆容易产生 memory leak
堆的效率比栈要低得多
栈变量引用容易逃逸
以上都对
答案: A
A 堆的生长方向向上,栈向下 ;EBP 栈基址大,生长向着内存地址减少的方向。
栈:在Windows下,栈是向低地址扩展的数据结构,是一块连续的内存的区域。这句话的意思是栈顶的地址和栈的最大容量是系统预先规定好的,在WINDOWS下,栈的大小是2M(也有的说是1M,总之是一个编译时就确定的常数),如果申请的空间超过栈的剩余空间时,将 提示overflow。因此,能从栈获得的空间较小。
堆:堆是向高地址扩展的数据结构,是不连续的内存区域。这是由于系统是用链表来存储 的空闲内存地址的,自然是不连续的,而链表的遍历方向是由低地址向高地址。堆的大小 受限于计算机系统中有效的虚拟内存。由此可见,堆获得的空间比较灵活,也比较大。
相关文章推荐
- 用vs2013编写C语言与编写C++的区别
- C语言 malloc calloc realloc alloc 在分配内存时的 区别
- Majority Element
- C语言的二维和三维动态连续数组分配
- C语言中移位符需要注意的地方
- C++基本知识归纳(2)
- 浅谈C++中指针和引用的区别
- c++的赋值构造函数以及vector::push_back的问题
- C语言:详解指针
- C/C++如何传递二维数组?
- 一起talk C栗子吧(第四十回:C语言实例--遍历二叉树)
- C++ 虚指针、成员变量与类对象的偏移地址
- C++中delete和delete[]的区别
- C++ 读取键盘输入(cin/cin.getline()/cin.get()/cin.clear())
- C和C++结构体的初始化和赋值
- 一起talk C栗子吧(第三十九回:C语言实例--创建一棵二叉树)
- 开源的c/c++编译器 mingm 编译、执行一段简单的c/c++代码
- c++ primer 学习笔记-第十二章
- [C语言][LeetCode][169]Majority Element
- <C/C++算法>九度OJ题目1516--1557解题练习(十)