Составители:
void DeleteList()
{
// отменить закрепление памяти и освободить адресное пространство
// Для операции MEM_DECOMMIT необходимо указать размер области
if( ! VirtualFree( (void*) pBase, MAX_ITEMS*ITEM_SIZE,
МЕМ_DECOMMIT))
ShowErrorMsg ( __LINE__ ) ;
// освободить память, начиная с базового адреса;
// указывать размер не требуется
if( ! VirtualFree( (void*) pBase, 0, MEM_RELEASE ) )
ShowErrorMsg( __LINE__ );
return;
}
По индексу в списке функция GetPageBaseEntry определяет первый
элемент соответствующей страницы памяти, округляя индекс до ближайшего
значения, кратного четырем и меньшего или равного iPlace.
int GetPageBaseEntry ( int iPlace )
{
while( iPlace % 4 )
{
iPlace--;
}
return( iPlace ) ;
}
После удаления записи из списка необходимо обновить массив, который
связывает элементы списка со значениями смещения в памяти. Параметр iStart
задает позицию строки, удаленной из списка.
void AdjustLookupTable ( int iStart )
{
int i;
// Этот цикл начинается с позиции, из которой только что
// была удалена запись. Все последующие элементы смещаются
// таким образом, чтобы заполнить образовавшееся свободное место.
for( i = iStart; i < MAX_ITEMS - 1; i++ )
{
iListLookup[i] = iListLookup[i + 1];
}
iListLookup[MAX_ITEMS - 1] = 0;
24
void DeleteList()
{
// отменить закрепление памяти и освободить адресное пространство
// Для операции MEM_DECOMMIT необходимо указать размер области
if( ! VirtualFree( (void*) pBase, MAX_ITEMS*ITEM_SIZE,
МЕМ_DECOMMIT))
ShowErrorMsg ( __LINE__ ) ;
// освободить память, начиная с базового адреса;
// указывать размер не требуется
if( ! VirtualFree( (void*) pBase, 0, MEM_RELEASE ) )
ShowErrorMsg( __LINE__ );
return;
}
По индексу в списке функция GetPageBaseEntry определяет первый
элемент соответствующей страницы памяти, округляя индекс до ближайшего
значения, кратного четырем и меньшего или равного iPlace.
int GetPageBaseEntry ( int iPlace )
{
while( iPlace % 4 )
{
iPlace--;
}
return( iPlace ) ;
}
После удаления записи из списка необходимо обновить массив, который
связывает элементы списка со значениями смещения в памяти. Параметр iStart
задает позицию строки, удаленной из списка.
void AdjustLookupTable ( int iStart )
{
int i;
// Этот цикл начинается с позиции, из которой только что
// была удалена запись. Все последующие элементы смещаются
// таким образом, чтобы заполнить образовавшееся свободное место.
for( i = iStart; i < MAX_ITEMS - 1; i++ )
{
iListLookup[i] = iListLookup[i + 1];
}
iListLookup[MAX_ITEMS - 1] = 0;
24
Страницы
- « первая
- ‹ предыдущая
- …
- 22
- 23
- 24
- 25
- 26
- …
- следующая ›
- последняя »
