C++ 从业者,总是避免不了内存管理问题。而就从最浅的层面上来看,我们能手动分配的一般就是堆这块内存,在C和C++中最常用的就是malloc和new,所以说很多大厂面试官,mallocnew一定会考你,作为基础题目先上盘小菜,然后再从这两者出发,引申出一些内存管理的方法和手段,来判定你的工作经验以及技术深浅。

小编面试过深信服,迅雷,字节跳动,腾讯无一不例外喜欢考察new和malloc。而令我印象非常深刻的是有道题目,在malloc给你的一块内存上再去new实例化这块内存,当时把我干懵了,因为我不是科班出身,那本C++ primer plus第六版我都没看完,我肯定不知道。但是作为一个成熟人士处变不惊,按照我的理解,取得了一块可以容纳指定类型对象的内存之后,在这块内存上构造一个对象,等于在一块内存上你可以对任意位置进行操作,所以我觉得跟operator重载有关系,但很可惜我只答到这个层面,面试官很不满意,正确的答案是placement new操作。

要理解这个词,要首先理解new操作之后,编译器做了哪些事。调用new运算编译是调用operator new()分配内存,然后调用构造函数生成类对象,最后返回相应指针。所以在使用new关键字建立一个新的对象,编译器的第二步就是调用对象的构造函数生成类对象,就是用placement new来完成的。

用placement new可以自己手动管理内存,不用默认方式。我想这个平时也比较少涉及到,因为大多数人的内存都是默认new完之后不会再去改变,所以说有点冷门,但是这个又很好的看出你技术的深度和广度。

而由placement new可以再引申出内存池的管理,对于大块内存再细分小块内存,而这个就是内存管理的重点了。