2014-12-24 3 views
1

У меня есть 6 ГБ свободной физической памяти. Im работает с большими данными, размером около 4 ГБ. Я просто понял, что я не могу сохранить его путь, я использовал, чтобы сделать это с меньшими данными (~ 1 Гб):Запись двоичного файла chunk

void save(char f_name[], int size, float data[]) 
{ 
    std::fstream f_bin(f_name, std::ios::out|std::ios::binary); 

    f_bin.seekg(std::ios::beg); 
    f_bin.write((char*)data, size*sizeof(float)); 
    f_bin.close(); 
} 

becouse он принимает данные в памяти, и она нуждается в таком же объеме оперативной памяти, чтобы записать его к HD. Есть ли способ записать 4 ГБ в (например, 1 ГБ) кусках, поэтому он никогда не превысит лимит 6 ГБ?

+1

Интересно, будет ли необходимость иметь такое же количество оперативной памяти платформы. –

+1

Во-первых, я полагаю, вы на 64-битной платформе? Во-вторых, физическое ОЗУ не имеет большого значения, поскольку ОС будет использовать жесткий диск для дополнительной виртуальной памяти, если это потребуется. Какую ОС вы используете? –

+0

im on Cygwin_4.x-Windows 64bit – user1930254

ответ

1

Как о чем-то к эффекту

void save(char f_name[], int size, float data[]) 
{ 
    std::fstream f_bin(f_name, std::ios::out|std::ios::binary); 

    f_bin.seekp(std::ios::beg); 

    while (size > 0) 
    { 
     int amount = std::min(1000, size); 
     f_bin.write((char*)data, amount * sizeof(float)); 

     data += amount; 
     size -= amount; 
    } 

    f_bin.close(); 
}