ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Лаба (работа с виртуальной памятью) |

16.04.2010, 21:37
|
|
Новичок
Регистрация: 07.02.2010
Сообщений: 10
Провел на форуме: 581083
Репутация:
0
|
|
Лаба (работа с виртуальной памятью)
Задали следующую лаб. работу на с++.
Разработать программу, которая демонстрирует управление структурами данных типа «очередь», элементы которого занимают 12 кб. Операции, выполняемые над очередью:
1 проверить, очередь пуста/не пуста;
2 добавить элемент в хвост очереди;
3 удалить элемент из головы очереди;
4 просмотреть голову очереди;
5 продублировать голову очереди.
Воспользоваться механизмом управления разделами виртуальной
памятью.
Суть такова: есть односвязный список. выделил под него регион памяти
как правильно выделить на один элемент структуры 12кб памяти ?
Ниже выдержка из кода программы:
PHP код:
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;
и
PHP код:
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
Последний раз редактировалось dpbid; 16.04.2010 в 21:39..
|
|
|
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|