PDA

Просмотр полной версии : Лаба (работа с виртуальной памятью)


dpbid
16.04.2010, 21:37
Задали следующую лаб. работу на с++.
Разработать программу, которая демонстрирует управление структурами данных типа «очередь», элементы которого занимают 12 кб. Операции, выполняемые над очередью:
1 проверить, очередь пуста/не пуста;
2 добавить элемент в хвост очереди;
3 удалить элемент из головы очереди;
4 просмотреть голову очереди;
5 продублировать голову очереди.
Воспользоваться механизмом управления разделами виртуальной
памятью.

Суть такова: есть односвязный список. выделил под него регион памяти
как правильно выделить на один элемент структуры 12кб памяти ?

Ниже выдержка из кода программы:


base_addr = VirtualAlloc(NULL, REGIONS_LIMIT*region_size, MEM_RESERVE, PAGE_NOACCESS);//base adres vcego rege0na
if (base_addr == NULL )
printf ("Error! VirtualAlloc reserve failed with error code of %ld\n", GetLastError ());

next_region = (Ochered *) base_addr;

VirtualAlloc((LPVOID) next_region, region_size, MEM_COMMIT, PAGE_READWRITE); // read/write access

top = next_region;

regions++;
next_region += region_size;

и
void Add_Item(int och)
{
LPVOID alloc_result;
Ochered *new_item;

alloc_result = VirtualAlloc((LPVOID) next_region, region_size, MEM_COMMIT, PAGE_READWRITE); // read/write access
if (alloc_result == NULL )
printf("VirtualAlloc failed\n");
else
{
printf ("Allocating another region.\n");

new_item = next_region;

regions++;
next_region += region_size;

cout << "Enter data: ";
cin >> new_item->data;

if(och == 0)
{
top = new_item;
top->next = NULL;
}
else
{
Ochered *node = top;
while(node->next != NULL)
node = node->next;
new_item->next = node->next;
node->next = new_item;
}
och_size++;
}
}


Сюда залил теоретический материал по лаб. работе и сам исходник программы, тот что у меня получился http://slil.ru/28969893