确定C++中新运算符分配的内存大小
Determine size of Memory allocated by new operator in C++
如何确定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];
甚至不满意。。!您可以按照自己的意愿重载新操作符。谷歌新运营商超载。
相关文章:
- Win32编译器选项和内存分配
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 当需要超过16GB的连续内存时,内存分配失败
- 尝试摆脱任何堆内存分配
- 以下代码执行哪种内存分配(动态或静态)?
- 开放 CV 中的动态内存分配,用于视频处理
- 为什么类和 main() 函数中也有动态内存分配
- 使用 NTAllocateVirtualMemory 和 GetProcAddress 的内存分配问题不起作用
- C++:矢量分配器行为、内存分配和智能指针
- 介于 [固定数组] 和 [带内存分配的指针] 之间的性能
- Linux C++ 中的页面对齐内存分配
- 整数内存分配/释放
- 将内存分配返回值强制转换为 TYPE 数组
- C++程序什么都不做,但瓦尔格林德显示内存分配
- 给定特定内存地址的数组的动态内存分配
- 如何完成内存分配
- 我刚刚了解了C++中的动态内存分配
- 在先前调用 string::find 后添加内存分配和内存集会导致它返回 npos.为什么?
- 对于堆上的页面对齐内存分配是否有任何优化或不同的 API?
- 无法删除布尔动态内存分配