确定C++中新运算符分配的内存大小

Determine size of Memory allocated by new operator in C++

本文关键字:内存 分配 运算符 C++ 确定      更新时间:2023-10-16

如何确定C++new运算符分配的内存大小?

在C中,malloc的语法为:

void *malloc(size_t size);

在这里我们知道我们分配的大小。

但是在C++中,当我们如下进行内存分配时,我们如何确定分配的大小。我很想知道new是如何确定需要分配的大小的。

foo *pFoo = new foo();

C++运算符new分配sizeof(T)字节(使用标准全局分配器::operator new(size_t)T的自定义分配器(如果已定义))。

之后,它调用构造函数(首先是基和其他子对象,然后是T本身的构造函数)。

然而,调用的一些构造函数分配更多内存是可能的,甚至是常见的。

出于测试目的,您可以覆盖全局运算符new以了解分配了多少:

void* operator new(size_t size)
{
    std::cout << "allocating " << size << std::endl;
    return malloc(size);
}

[真的不建议用于生产代码,但它可以完成-仔细阅读。].

void *malloc(size_t size);

在这里,您可以指定需要分配的大小,它返回的是void*,您可以稍后将其强制转换为所需的指针类型。

foo *pFoo = new foo();

在这里,大小由新对象本身通过对象布局来决定。还要注意,新操作符调用了foo的构造函数。如果你需要它,就像你为malloc做的一样,做如下:

 void * ptr = new size_t[size];

甚至不满意。。!您可以按照自己的意愿重载新操作符。谷歌新运营商超载。