在C中放置新的等价物

Tea*_*low 3 c memory-management

在C中是否存在C++的新布局?我的意思是,一个对象可以在C中的指定位置构建吗?可以realloc()用于吗?

Pot*_*ter 10

Placement new只是跳过分配并在预分配的内存中构造一个对象.由于C缺少构造函数,因此无需放置新的构造函数.我认为等价物是一个指针类型转换,因为一旦你有一个指针,你就可以表现为一个对象存在.

从公共内存池中雕刻不同类型的对象的示例:

char *pool = (char *) malloc( 1000 );
char *pen = pool;

foo *obj1 = (foo *) pen;
pen += sizeof (foo);

bar *obj2 = (bar *) pen;
pen += sizeof (bar);

/* etc */
Run Code Online (Sandbox Code Playgroud)

当然,在执行此操作时,您需要负责将正确的指针传递给free并调整对齐要求 - 就像在C++中放置新内容一样.