Есть вектор log, каждый элемент которого содержит вектор params, с набором значений параметров.
Когда params был массивом, то в принципе распределение можно сделать уже указанным способом: выделять какому-то буферу большой кусок памяти, а потом "раздавать" эту память массивам params! Т.е. операция выделения памяти будет происходить не на каждой итерации чтения новой записи из файла.
PARAMVALUE* params; /// вместо указанного типа может быть абсолютно любой - сейчас важен принцип работы а не конкретика
// где-то
int param_buf_count = 0;
const int BUFF_SIZE = 2048;
char* param_buff = 0;
// ........................ Код чтения
LOGRECORD t;
if(param_buf_count >= BUFF_SIZE) param_buf_count = 0;
if(param_buf_count == 0)
{
param_buff = new char[rec_descr.size() * BUFF_SIZE];
}
t.params = param_buff + param_buf_count * rec_descr.size();
++param_buf_count;
// какие-то действия с заполнением вектора
Если же params - вектор, то следует писать распределитель памяти. Но при этом визуально код чтения не меняется и получается, что на каждой итерации идет выделение памяти. Или я что-то не так понимаю?
std::vector<PARAMVALUE, pool_alloc<PARAMVALUE>> params; /// вектор с собственным распределителем
// ........................ Код чтения
LOGRECORD t(rec_descr.size());
// какие-то действия с заполнением вектора
Как видно по коду, то в первом случае выделение происходит только при определенных условиях, а во 2 случае таких условий не видно. Каким же образом тогда происходит распределение памяти?