Jim*_*ker 3 c++ memory-management placement-new
我正在使用C++,我有以下结构:
struct ArrayOfThese {
int a;
int b;
};
struct DataPoint {
int a;
int b;
int c;
};
在内存中,我想在每个DataPoint的末尾有一个或多个ArrayOfThese元素.每个DataPoint并不总是具有相同数量的ArrayOfThese元素.
因为我有一些荒谬的DataPoints要组装然后通过网络流,我希望我的所有DataPoints和它们的ArrayOfThese元素是连续的.为固定数量的ArrayOfThese元素浪费空间是不可接受的.
在C中,我会在DataPoint的末尾创建一个声明为的ArrayOfThese d[0];元素,为我所拥有的多个ArrayOfThese元素分配一个DataPoint加上足够的额外字节,并使用虚拟数组索引它们.(当然,ArrayOfThese元素的数量必须在DataPoint的字段中.)
在C++中,正在使用placement new和相同的0-length数组破解正确的方法?如果是这样,放置新保证后续从同一内存池调用new会连续分配吗?
由于您正在处理没有构造函数的普通结构,因此可以恢复为C内存管理:
void *ptr = malloc(sizeof(DataPoint) + n * sizeof(ArrayOfThese));
DataPoint *dp = reinterpret_cast<DataPoint *>(ptr));
ArrayOfThese *aotp = reinterpet_cast<ArrayOfThese *>(reintepret_cast<char *>(ptr) + sizeof(DataPoint));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
504 次 |
| 最近记录: |