long size;
void far* buf1, far* buf2;
// Выделение памяти для сохранения 1-ого фрагмента
size = imagesize(0,0,220,220);
buf1 = farmalloc(size);
// для 2-ого фрагмента
size = imagesize(220,0,440,220);
buf2 = farmalloc(size);
if(buf1 == NULL || buf2 == NULL)
{
cout<<"Not enough memory";
getch();
exit(1);
}
//.....
Собственный диспетчер памяти для С/С++
статью. Но после прочтения осталось больше вопросов, чем ответов.
Диспетчер памяти понадобился не просто так, а по причине того, что ф-ии getimage() и putimage(), описанные в graphics.h, могут работать с экранной областью, размер которой <= 64K. И разрешение такой экранной области в режиме VGAHI приблизительно 350*350 пикселей, что довольно мало, для среднестатистического окна , перемещение которого планируется реализовать в GUI.
Заранее спасибо !
Кто-нибудь имел дело с написанием диспетчера памяти ? Поделитесь пожалуйста исходниками, для ознакомления принципов работы. Нашел в инете неплохую
Диспетчер памяти понадобился не просто так, а по причине того, что ф-ии getimage() и putimage(), описанные в graphics.h, могут работать с экранной областью, размер которой <= 64K. И разрешение такой экранной области в режиме VGAHI приблизительно 350*350 пикселей, что довольно мало, для среднестатистического окна , перемещение которого планируется реализовать в GUI.
Заранее спасибо !
Цитата: artem90
Кто-нибудь имел дело с написанием диспетчера памяти ?
Гыым, помню 3 курс ИВТ, предмет "Операционные системы" - там таким спортом занимались.
Цитата: artem90
Диспетчер памяти понадобился не просто так, а по причине того, что ф-ии getimage() и putimage(), описанные в graphics.h, могут работать с экранной областью, размер которой <= 64K.
А как диспетчер памяти в этом случае может помочь?
Это следствие сегментации памяти, нельзя непрерывно адресовать кусок памяти больше 64кб. Выходов можно придумать несколько, как простых - нарезать область экрана на куски по 64 кб, писать свои функции для вывода изображения, так и немного посложнее - использование расширенной памяти, переход к линейной адресации или защищённому режиму.
Цитата: Vov4ick
нарезать область экрана на куски по 64 кб
Vov4ick, а на счет этого можно поподробнее, пожалуйста. Потому что я пробовал вырезать фрагментами. Вот кусок кода:
Код:
Так вот при попытке выделить память для 2-ого фрагмента, farmalloc возвращает NULL, и вырезать фрагментами не получается :(
А вообще памяти достаточно? Из-под венды пускаете? Свойства программы нормально настроены?
Цитата: Vov4ick
А не в параграфах ли принимает функция выделения размер необходимого блока?
farmalloc, так же как и обычный malloc, принимает размер в байтах.
Цитата: Vov4ick
А вообще памяти достаточно? Из-под венды пускаете?
Запускаю из среды Borland C++ 3.11. ОС: WinXP SP2
Цитата: Vov4ick
Свойства программы нормально настроены?
Если вы имеете ввиду свойства среды, то в настройках модель памяти стоит Huge, Heap Size - 640K. Все остальные значения, связанные с памятью я тоже поставил на максимум.
Да, совсем забыл, не пользуйте getimage, это тормозно. При движении чего-либо по экрану, лучше выводить заново. Вообще анимация встроенными сишными функциями будет тормозной. Это я так, чтобы не было разочарований.
Может будет полезным. :)