Эффективность этой идеи зависит от вашей схемы доступа, но если вы не просматриваете данные с переменным размером каждый цикл, вы можете ускорить доступ, изменив структуру файла:
Вместо того, чтобы писать прямой дамп такой структуры:
struct {
int x;
enum t;
int sz
char variable_data[sz];
};
вы можете написать все части фиксированного размера заранее, а затем сохранить переменные части:
struct {
int x;
enum t;
int sz;
long offset_to_variable_data;
};
Теперь, когда вы анализируете файл каждый цикл, вы можете линейно читать N записей одновременно. Вам придется иметь дело с fseek только тогда, когда вам нужно получить данные переменного размера. Вы можете даже подумать о том, чтобы сохранить эту переменную часть в отдельном файле, чтобы вы могли читать только через этот файл.
Эта стратегия может даже улучшить вашу производительность, если вы используете файл с отображенной памятью, как предлагали другие.