解释glibcmalloc和freeglibc内部结构的文章数量众多。但是,我想知道动态内存管理在 C++ 中是如何工作的,特别是newanddelete运算符的本质。我的兴趣在于维护的内部数据结构以及分配和取消分配算法。有哪些相同的好资源?
new 运算符在 C++ 内部如何工作?
逆向工程
C++
记忆
2021-06-30 07:35:43
1个回答
这在某种程度上是特定于编译器的,但在大多数情况下new,delete基本上是围绕malloc和的薄包装器free(关于内存本身的分配)。C++ 标准中描述了一些关于新表达式和类及其成员的构造/销毁序列的其他 C++ 细节(cppreference提供了一个很好的总结)。我所描述的一些有关的MSVC ++实现的细节在这里
一些额外的皱纹:
一个类可以重新定义一个自定义运算符
new/delete,在构造该类的实例时,它将被调用而不是全局运算符。这可能会导致多态类出现棘手的情况,因此编译器可能需要引入一个隐藏的虚拟析构函数(再次参见我的 OpenRCE 文章)。在分配类数组时,许多编译器还会在为该数组分配的内存中嵌入一些元素,以便可以正确销毁它。这就是为什么混合的原因之一
delete,并delete[]可能是危险的。
其它你可能感兴趣的问题