一、placement new的定义
通常情况下,C++中通过用new方式申请内存空间时,是在系统的堆内存空间中进行分配,底层使用C标准库的 malloc() 完成内存分配工作。
因此本次申请的内存空间大小,是根据程序运行时对象的大小及使用情况来决定的。
但是某些场景中,可能需要预先分配完成内存空间,然后再把对象"放置"在之前预先分配的内存空间上。即所谓的 placement new 操作。
定点放置的new操作的语法不同于普通的new操作,比如:我们一般在堆中申请内存空间,通常写:
Object* o = new Object();
而定点放置new的语法形式为:
Object* o = new (pointer) Object();
这里的pointer就是预先分配好内存块的首地址。
二、placement new使用场景
传统堆分配内存方式的弊端:通过new操作符进行堆内存的分配,操作系统需要在堆中找到连续且大小符合要求的内存空间,这个查询匹配的效率是低下的。
极端情况下可能由于空间不足,导致出现内存分配失败的问题发生。
placement new 分配方式:创建的对象都在预先分配好的内存缓冲区中操作,无需查询及匹配内存空间,内存分配的时间是常量O(1)。
由于在之前预留的内存空间进行分配,因此不会出现程序运行时由于内存空间不足,导致内存分配失败的问题。
三、placement new和 MySQL 内存管理机制的关系
正是由于上述 placement new 的机制特性,因此其非常适合那些对时间,性能要求高&