如何确定C ++ new运算符分配的内存大小。 ?
在C中,malloc的语法为:
void *malloc(size_t size);
这里我们知道我们分配的大小。
但是在C ++中我们如何确定在进行内存分配时分配的大小如下所示。我很想知道new
如何确定需要分配的大小。
foo *pFoo = new foo();
答案 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];
甚至不满意..!您可以按照自己的方式重载新运算符。谷歌超载新运营商。