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

时间:2014-04-14 05:26:52

标签: c++ memory-management

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

在C中,malloc的语法为:

void *malloc(size_t size);

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

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

foo *pFoo = new foo();

3 个答案:

答案 0 :(得分:5)

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

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

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

答案 1 :(得分:2)

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

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

[真的不推荐用于生产代码,但可以这样做 - 请仔细阅读。]。

答案 2 :(得分:-2)

void *malloc(size_t size);

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

foo *pFoo = new foo();

这里,尺寸由新的自身决定,通过对象布局。另请注意,new运算符调用foo的构造函数。如果你需要它和malloc一样,那就像下面这样:

 void * ptr = new size_t[size];

甚至不满意..!您可以按照自己的方式重载新运算符。谷歌超载新运营商。