C++中的内存分配

use*_*349 8 c++ memory new-operator

是否可以使用"new"运算符分配任意内存块?在CI中可以像"void*p = malloc(7);"那样做 - 如果内存对齐设置为1个字节,这将分配7个字节.如何使用new运算符在C++中进行相同的操作?

CB *_*ley 44

可以用operator newC++ 分配任意内存块; 不是new用于构造物体的操作员.

void* pBlock = ::operator new(7);
Run Code Online (Sandbox Code Playgroud)

随后可以释放这些块operator delete.

::operator delete(pBlock);
Run Code Online (Sandbox Code Playgroud)

请注意,operator new将为任何类型的对象分配适当对齐的内存,因此实​​现可能不会精确分配七个字节而不是更多,但同样(通常)为真malloc.C客户端malloc通常也需要对齐内存.

  • 提及那里的+1是*没有malloc&free :)的方法 (7认同)

dma*_*dma 11

其他人已经回答了这个问题,但我想建议坚持使用malloc/free进行此类分配.

new和delete用于分配对象.它们分配所需的内存并调用构造函数/析构函数.如果你知道你只需要一个任意的内存块,那么使用malloc和free是完全合理的.


Ada*_*eld 8

你不能void用C++的运算符分配一个指针new:你必须分配一个显式类型,如:charuint8_t:

char *p = new char[7];
uint8_t *q = new uint8_t[7];
...
delete [] p;
delete [] q;
Run Code Online (Sandbox Code Playgroud)