美文网首页程序员
阿里笔试题:C++中的内存分配

阿里笔试题:C++中的内存分配

作者: 开点工作室 | 来源:发表于2016-08-23 13:36 被阅读0次

有这样一道阿里笔试题:

C++内存分配中说法错误的是( )。
A.对于栈来说,生长方向是向上的,也就是向着内存地址增加的方向
B.对于堆,大量的new/delete操作会造成内存空间不连续
C.堆容易产生memory leak
D.堆的效率比栈要低很多
E.栈变量引用容易逃逸
F.以上都对

【答 案】A、F

【解 析】C++将各类变量分配在不同的区域中,主要有栈、堆、自由存储区、全局/静态存储区及常量存储区等。

题目中提到的几种存储空间的特性如下。

栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区。栈中的变量通常是局部变量、函数参数等。在一个进程中,位于用户虚拟地址空间顶部的是用户栈,编译器用它来实现函数的调用。用户栈在程序执行期间可以动态地扩展和收缩。因为栈具有先进后出的特点,故它的生长方向是向下的,是向着内存地址减小的方向增长。选项A是错误的。

堆,就是那些由new分配的内存块,这种内存的释放不由编译器管理,而由应用程序去控制。一般来说,一个new就要对应一个delete。如果程序员没有释放掉,会导致一直占据该内存单元,即所谓内存泄漏(选项C是正确的)。这些内存在程序结束后,操作系统才会自动回收。

对于堆来讲,频繁的new/delete操作势必会造成内存空间的不连续(选项B是正确的),从而造成大量的碎片,这会使程序效率降低(选项D是正确的)。对于栈来讲,则不会存在这个问题,因为栈是先进后出的,不可能有一个内存块从栈中间弹出,所以不会有碎片产生。

在计算机语言编译器语言优化管理中,当变量(或者对象)在方法中分配后,其指针有可能被返回或者被全局引用,这样就会被其他过程或者线程所引用,这种现象称作指针(或者引用)的逃逸(Escape)。分析指针动态范围的方法称之为逃逸分析。当一个对象的指针被多个方法或线程引用时,这个指针就发生了逃逸。例如在一个方法b内部生成的一个对象V的引用,返回给另一个方法a内的变量v时,或方法c内生成的一个对象W被赋给了全局变量global_v,就发生了指针(引用)逃逸。故选项E是正确的。

本文已收录于《横扫Offer--程序员招聘真题详解700题》一书,开点工作室著,清华大学出版社。更多程序员笔试面试真题的精彩详解请参见该书。

为保证书稿质量,作者及出版社在编写完成后经过反复多次的审核、校对和修改,力求为读者奉献一本内容详实、严谨、准确、精美的实用宝典,因此上市时间有所延后,望各位读者谅解。该书目前已进入印刷环节,预计8月下旬各大网上书店开始发售。我们将会在第一时间通知该书的上市购买信息,并将举行评论送书活动,以感谢各位读者的支持。详细情况请持续关注微信公众账号“开点工作室”。

相关文章

  • 阿里笔试题:C++中的内存分配

    有这样一道阿里笔试题: C++内存分配中说法错误的是( )。A.对于栈来说,生长方向是向上的,也就是向着内存...

  • C++中New关键字和命名空间

    动态内存分配 C++中的动态内存分配C++中通过new关键字进行动态内存申请C++中的动态内存申请是基于类型进行的...

  • 内存管理

    内容包括: C++内存管理 Java内存管理 C++内存管理 内存分配方式 在C++中,内存分成5个区,分别是栈、...

  • C++中的新成员

    C++中的动态内存分配 C++中通过new关键字进行动态内存申请 C++中的动态内存申请是基于类型进行的 dele...

  • C++ 内存分配和管理

    C++ 内存分配和管理

  • 十、动态内存分配与命名空间

    1、C++中的动态内存分配 通过new关键字进行动态内存申请 C++中的动态内存申请时基于类型进行的 delete...

  • sse中内存对齐问题

    c++ sse中无论声明栈内存还是堆内存都需要声明内存对齐,在VC++中:堆内存分配使用_aligned_mall...

  • C++ 中的内存分配

    内存分配方式有三种 从静态存储区域分配内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全...

  • JVM 常见内容汇总

    面试题 对象 对象的创建 分配内存 对象头 内存溢出 内存溢出与内存泄漏 内存溢出:系统无法再分配内存空间。 内存...

  • c++内存分配方式

    c++内存分配方式 1.内存分配简单介绍: 一个由C/C++编译的程序占用的内存分为以下几个部分:1、栈区(sta...

网友评论

    本文标题:阿里笔试题:C++中的内存分配

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