→ Для вступления в общество новичков и профессионалов программирования, пожалуйста нажмите здесь ...

Форум программистов: C++, Basic, Delphi, Pascal, JavaScript
Логин: Пароль:
Запомнить?  
@Mail.ru



Начать новую тему Ответить на тему  [ 1 сообщение ] 
Not understand fragment of code 
Автор Сообщение
Начинающий

Регистрация: 26.01.2015
Сообщения: 1

Репутация: 0 [ ? ]
Сообщение Not understand fragment of code
я только знаю, что здесь вызывается функция для чтения информации из ранее выделенной памяти,
это часть кода из темы по программе "Менеджер сегментированной памяти":
...................................................................................................
int ReadMemory(int MemoryHandle, int Offset, int Size, void *Data)
{
char *ar1=(char *)Data;
char *ar2=0;
for (i=0;i<30;i++)
{
if(BAr[i].Handle==MemoryHandle)
{
ar2=&mem[BAr[i].Begin+Offset];
for(int i=0;i<Size;i++)
{
ar1[i]=ar2[i];
printf("%i\n",ar1[i]);
}
}
}
return 0;

}
.......................................................................................................

расскажите пожалуйста, знающие программисты, что здесь происходит? что к чему? для чего? зачем?


Исходный код

// memory_manager.cpp: определяетточкувходадляконсольногоприложения.
//
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <iostream>
#include "prototypes.h"
#include <locale.h>

using namespace std;
char Data[10]={1,2,3,4,5,6,7,8,9,0};
int a;
inti;
char mem[10000];

void main(void)

{
setlocale (LC_ALL, "RUSSIAN");
int hand=0;
int hand1=1;
int hand2=2;
int hand3=3;
InitMemory();
AllocMemory(1500);
AllocMemory(2000);
AllocMemory(4000);
WriteMemory(hand,0,3,Data);

printf("[[[ Блокидочистки ]]] \n \n");
DumpMemory();

FreeMemory(hand);
FreeMemory(hand1);
FreeMemory(hand2);
FreeMemory(hand3);
printf("[[[ Блокипослечистки ]]] \n \n");
DumpMemory();

getch();
}

struct Block
{
int Handle;
int Size;
int Begin;
int Busy;
};

struct Block BAr[30];
void InitMemory(void)
{
BAr[0].Handle=0;
BAr[0].Size=10000;
BAr[0].Begin=0;
BAr[0].Busy=0;
}

intAllocMemory(intsz)
{
for (inti=0;i<30;i++)
{
if (BAr[i].Busy==0)
{
if (BAr[i].Size>sz)
{
for (int j=0;j<30;j++)
{
if (BAr[j].Size==0)
{
BAr[j].Size=BAr[i].Size-sz;
BAr[j].Begin=BAr[i].Begin+sz;
BAr[j].Busy=0;
BAr[i].Busy=1;
BAr[i].Size=sz;
a++;
BAr[j].Handle=a;
return BAr[j].Handle;
}
}
}
}
}
return 0;
}

void FreeMemory(intMemoryHandle)
{
for (i=0;i<30;i++)
{
if(BAr[i].Handle==MemoryHandle)
BAr[i].Busy=0;
}
}

intWriteMemory(intMemoryHandle, int Offset, int Size, void *Data)
{
char *ar1=(char *)Data;
char *ar2=0;
for (i=0;i<30;i++)
{
if(BAr[i].Handle==MemoryHandle)
{
int w=BAr[i].Size;
if(Offset<0 || Offset>=w || Size<=0)
{
printf("");
}
else
{
ar2=&mem[BAr[i].Begin+Offset];
for(inti=0;i<Size;i++)
{
ar2[i]=ar1[i];
}
}
}
}
return 0;
}

intReadMemory(intMemoryHandle, int Offset, int Size, void *Data)
{
char *ar1=(char *)Data;
char *ar2=0;
for (i=0;i<30;i++)
{
if(BAr[i].Handle==MemoryHandle)
{
ar2=&mem[BAr[i].Begin+Offset];
for(inti=0;i<Size;i++)
{
ar1[i]=ar2[i];
printf("%i\n",ar1[i]);
}
}
}
return 0;
}

void DumpMemory(void)
{
for (inti=0;i<30;i++)
{
if(BAr[i].Size==0)
continue;
printf(" Handle=%i",BAr[i].Handle);
printf(" Begin=%i",BAr[i].Begin);
printf(" Size=%i",BAr[i].Size);
if(BAr[i].Busy==1)
{
printf(" Блокзанят?Да \n");
}
elseprintf(" Блокзанят? Нет \n");
}
printf("\n");
}


26.01.2015 1:24
Профиль Отправить email
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ 1 сообщение ] 


Кто сейчас на конференции

Зарегистрированные пользователи: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
cron
© 2013 «Форум программистов Украины»