Составители:
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
- …
- следующая ›
- последняя »