zoukankan      html  css  js  c++  java
  • 20180318 内存分配

    C++内存分配中说法错误的是:______。
    对于栈来讲,生长方向是向上的,也就是向着内存地址增加的方向
    对于堆,大量的 new/delete 操作会造成内存空间的不连续
    堆容易产生 memory leak
    堆的效率比栈要低得多
    栈变量引用容易逃逸
    栈区一般由编译器自动分配释放,堆区一般由程序员分配释放。

    答案 A  错选 D

      栈:在Windows下,栈是向低地址扩展的数据结构,是一块连续的内存的区域。这句话的意思是栈顶的地址和栈的最大容量是系统预先规定好的,
    在WINDOWS下,栈的大小是2M(也有的说是1M,总之是一个编译时就确定的常数),如果申请的空间超过栈的剩余空间时,将 提示overflow。
    因此,能从栈获得的空间较小。    
      堆:堆是向高地址扩展的数据结构,是不连续的内存区域。这是由于系统是用链表来存储  的空闲内存地址的,自然是不连续的,而链表的遍历
    方向是由低地址向高地址。堆的大小  受限于计算机系统中有效的虚拟内存。由此可见,堆获得的空间比较灵活,也比较大。

    在C/C++中,内存一般分为,堆区,栈区,全局区,文字长量区,程序代码区!在函数中定义的局部变量是存在在栈区(除static局部变量,他是存在在全局区),动态生成的变量存在在堆区,由指针进行读写!全局变量,静态全局变量,静态局部变量是存放在全局区的! 堆是程序员进行申请和释放的,因此堆是向上,也就是向高地址方向的!栈是系统进行释放的,且栈区大小一般是定的2M,因此栈是向下,也就是向底地址方向! 另外说下,静态局部变量,静态全局变量和全局变量的区别,静态变量没有初始化时,系统会给默认值,而全局变量不会!全局变量在整个工程中都是可见的,而静态全局变量只在本文件中可见,静态局部变量只在此函数内部可见,但函数结束后不释放!




    栈的生长方向向下,即向地址减小的方向扩展
    堆的生长方向向上,即向地址增大的方向扩展


  • 相关阅读:
    1046 Shortest Distance (20 分)(模拟)
    1004. Counting Leaves (30)PAT甲级真题(bfs,dfs,树的遍历,层序遍历)
    1041 Be Unique (20 分)(hash散列)
    1036 Boys vs Girls (25 分)(查找元素)
    1035 Password (20 分)(字符串处理)
    1044 Shopping in Mars (25 分)(二分查找)
    onenote使用小Tip总结^_^(不断更新中...)
    1048 Find Coins (25 分)(hash)
    三个故事
    领导者的举止
  • 原文地址:https://www.cnblogs.com/kxzh/p/8598118.html
Copyright © 2011-2022 走看看