在C中放置新的等价物

时间:2013-01-15 15:05:03

标签: c memory-management

在C中,等效的C ++放置是否会退出?我的意思是,一个对象可以在C中的指定位置构建吗?可以realloc()使用吗?

3 个答案:

答案 0 :(得分: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 */

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

答案 1 :(得分:3)

由于C没有像构造函数那样的东西,你可以简单地获取地址并将其转换为指向你想要使用的类型的指针。当然,您需要确保正确对齐,否则可能会失败(但在C ++中使用new替换也是如此)。

答案 2 :(得分:1)

C中没有“placement new”这样的东西。另一方面,你可以声明一个指针并指向内存中的任何东西:

char *pointer = 0x12345678;

上面的指针现在指向地址0x12345678

这通常用于嵌入式系统,其中某些设备位于内存中的某些位置。

相关问题