列ストア データベース システムの実装にメモリ割り当ての問題があります。これは特に、データベースにテーブルをインポートするための MySql コネクタの実装の一部です。
次のベクトルがあるとします。
std::vector <void *> data;
次のように、ポインターにデータを追加するための型をチェックする関数があります。
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 * により多くのメモリを割り当てて値を追加する方法がわかりませんか?
EDIT これは、行ではなく列にデータを格納している列ストアデータベース用です。明確にするために、行ストア データベースである mySQL からデータを列に追加するクリーンな方法が必要です。
MySql ++を使用してテーブル内の行数を取得できる場合、私の問題を簡単に解決できますか? 次に、最初にその数の行 * (datattype のサイズ) バイトを割り当てて、このメモリを埋めることができます。