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

Форум программистов: 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 сообщение ] 


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

Зарегистрированные пользователи: Google [Bot]


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

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