Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.01.2015, 02:53   #1
olegarxxx
Новичок
Джуниор
 
Регистрация: 26.01.2015
Сообщений: 1
По умолчанию Фрагмент кода "Менеджер сегментированной памяти"

я только знаю, что здесь вызывается функция для чтения информации из ранее выделенной памяти,
это часть кода из темы по программе "Менеджер сегментированной памяти":
................................... ................................... .............................
Код:
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");
}

Последний раз редактировалось Stilet; 26.01.2015 в 07:38.
olegarxxx вне форума Ответить с цитированием
Старый 28.01.2015, 01:04   #2
abit
Пользователь
 
Регистрация: 21.10.2014
Сообщений: 43
По умолчанию

откровенно говоря это ужасный код, конкретно вот, упростим
Код:
for (i=0;i<30;i++)
{
if(A)
{
...
for(int i=0;i<Size;i++)
{
Вас ничего не смущает в конструкции for (int i=0;..;..) {for (int i=0;..;...) ... ?
да и BAr[i].Handle сам по себе глуп, не изучайте такой говнокод, только ради забавы разве что...
abit вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Постоянно слетает галочка "автоматически" в "Параметры Excel", "Формулы", "Вычисления в книге" Alexsandrr Microsoft Office Excel 4 19.10.2013 14:22
Написать аналог программы "Коннект Менеджер" для 3G модема Гражданин.РФ Помощь студентам 1 26.12.2011 14:41
ошибка приложения инструкция по адресу "0х00400000" обратилась к памяти по адресу "0х00400000". Память не может быть "wr sanalia Помощь студентам 0 30.09.2011 22:20
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 12:04