Информатика и технология программирования
Данный пример не производит обновление
Данный пример не производит обновление измененных строк в файле ввиду его простоты.
//------------------------------------------------------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*)& size ,sizeof(int),1,fd); // Прочитать размерность
fcash=new long[size]; // Создать динамический массив
pcash=new char*[ size]; // файловых указателей и указателей
fread((void*)pp,sizeof(long), size ,fd); // на строки.
for (i=0; i<n; 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*)&sz,sizeof(int),1,fd); // указателю и прочитать запись
p cash[n]=new char[sz]; // переменной длины - строку
fread((void*)p cash[n],sz,1,fd);
return pcash[n];
}
Термин " вытеснение" имеет отношение к случаю, когда в кэш-памяти нес свободного места для загрузки очередной порции данных. Алгоритмы выбора " кандидата" на удаление из кэш-памяти подробно исследованы в стратегиях вытеснения страниц в системах управления виртуальной памятью.
Содержание
Назад
Вперед
Fore
kc
.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий