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


           

Данный пример не производит обновление


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



//------------------------------------------------------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];
}

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


Содержание  Назад  Вперед