Информатика и технология программирования


Кэширование структур данных при работе с файлами - часть 2


Данный пример не производит обновление измененных строк в файле ввиду его простоты.


//------------------------------------------------------bk59-12.cpp


// Массив указателей - кэширование строк


char **pcash; // Массив указателей в памяти (кэш)


long *fcash; // и в файле


int size; // Размерность массива указателей


int nstr; // Количество загруженных строк


FILE *fd;
//---- Загрузка управляющих структур


void load(char *name)
{
int i,n;
if ((fd=fopen(name,"rb"))==NULL) return;
fread((void*)&#38 size ,sizeof(int),1,fd); // Прочитать размерность


fcash=new long[size]; // Создать динамический массив


pcash=new char*[ size]; // файловых указателей и указателей


fread((void*)pp,sizeof(long), size ,fd); // на строки.


for (i=0; i&#60n; i++) pcash[i]=NULL;
nstr=0;
}
//---- Загрузка строки с кэшированием


char *load_cash(int n)
{
if (pcash[n]!=NULL) return pcash[n]; // Строка уже в кэш-памяти


if (nstr==MAX)
{ /* Вытеснение лишней строки из памяти * /
nstr--;
}
nstr++;
int sz;
fseek(fd,fcash[i],SEEK_SET); // Установиться по i-му файловому


fread((void*)&#38sz,sizeof(int),1,fd); // указателю и прочитать запись


p cash[n]=new char[sz]; // переменной длины - строку


fread((void*)p cash[n],sz,1,fd);
return pcash[n];
}

Термин " вытеснение" имеет отношение к случаю, когда в кэш-памяти нес свободного места для загрузки очередной порции данных. Алгоритмы выбора " кандидата" на удаление из кэш-памяти подробно исследованы в стратегиях вытеснения страниц в системах управления виртуальной памятью.




Начало  Назад  Вперед



Книжный магазин