我在实现列存储数据库系统时遇到了内存分配问题。这尤其是实现 MySql 连接器以将表导入我的数据库的一部分。
假设我有以下向量:
std::vector <void *> data;
我有一个检查类型以将数据添加到指针的函数,如下所示: 如您所见,对于每一列,我们都有一个 void * 添加到向量中。
for(int c = 0; c != numCols; c++){
// ...
case BOOL_TYPE: {
bool *b;
data.push_back((void *) b);
}
break;
// ...
}
现在另一个读取表行的函数需要添加数据
while (mysqlpp::Row row = res.fetch_row()) {
for (int c = 0; c != numCols; c++) {
// ...
switch (colType){
case BOOL_TYPE: {
if(!isNull){
bool val = row[c];
data[c] = new char[sizeof(val)];
data[c] = val;
}
}
break;
//... more types
}
}
}
我担心这些行:
data[c] = new char[sizeof(val)];
data[c] = val;
我对 C++ 和内存管理非常陌生,所以我不确定如何每次都为 void * 分配更多内存然后添加值?
编辑 这是一个列存储数据库,我将数据存储在列而不是行中。需要明确的是,我需要一种干净的方式将 mySQL(行存储数据库)中的数据添加到我的列中。
我的问题的一个简单解决方案是,如果我可以使用 MySql++ 获取表中的行数?然后我可以最初分配那么多行 *(datattype 的大小)字节并填充这个内存。