ANTICHAT

ANTICHAT (https://forum.antichat.io/index.php)
-   С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby (https://forum.antichat.io/forumdisplay.php?f=24)
-   -   Лаба (работа с виртуальной памятью) (https://forum.antichat.io/showthread.php?t=196784)

dpbid 16.04.2010 21:37

Лаба (работа с виртуальной памятью)
 
Задали следующую лаб. работу на с++.
Разработать программу, которая демонстрирует управление структурами данных типа «очередь», элементы которого занимают 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


Время: 07:15