forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Проекты на BlitzMax (http://forum.boolean.name/forumdisplay.php?f=106)
-   -   elmax - набросок фреймворка (http://forum.boolean.name/showthread.php?t=4262)

elmortem 07.09.2007 15:16

Re: elmax - набросок фреймворка
 
MoKa
Память "специально" не выделяется. А если средствами Макса выделять память под объекты типов, то как может утечка появится?
Вообще, ни у нигде нет статейки на тему правильной работы с памятью в Максе?

JohnK
3Д не люблю, я казуален до мозга костей. (:
Есть 2Д надстройки над OpenGL для Delphi и C++ (разные). Есть надстройка над HGE для С++, тоже 2Д.
3Д нафиг, у него нет будущего. Это переходное звено между 2Д и Виртуальной Реальностью. (:

На счёт абстракций - так фигли такого-то? Нормальная обстрация, вполне удобоваримая. (:

johnk 07.09.2007 15:19

Re: elmax - набросок фреймворка
 
Вот:
http://johnk.3dn.ru/publ/1-1-0-3
Правда для версии 1.14. :)

dimanche13 07.09.2007 15:53

Re: elmax - набросок фреймворка
 
elmortem 3Д не люблю. Тоже думаю что 2Д себя не исчерпало.
Я вот тута задумал сделать игрушку. Платформер, аля Марио, но с головоломками и квестовыми лементами на Максе. Если есть желание присоединяйся. А если честно,то одному просто в падлу)))

Про память могу сказать одно. Она очищается и выделяется на лету, так сказано на оффсайте. Правда, говорят в pngloader есть протечка. Если любишь в памяти копаться, то для этого есть memmove, memcopy, GCSuspend и все в этом роде.

jimon 07.09.2007 16:34

Re: elmax - набросок фреймворка
 
манагер памяти в BMaxе довольно забавный :)
в общем в любом случае обьекты там надо удалять принудительно
разве что локальные ссылки чистятся хорошо сами
остальному я не доверяю :)

elmortem 07.09.2007 16:46

Re: elmax - набросок фреймворка
 
dimanche13
Если есть хороший художник, то можно обсудить в аське. Если нет, то смысла нет, мне пока есть в что вкладывать время и деньги. (:

jimon
Код:

type T1
...
endtype
type T2
  field t:T1 = new T1
endtype

global t:T2 = new T2
t = null

Вот такая ситуация как разрулится? t.t. удалится автоматически? Или нужно делать деструктор T2 b там принудительно Null'ить T2.t?

dimanche13 07.09.2007 16:53

Re: elmax - набросок фреймворка
 
**JohnK: Я редактор. Гонор придержи.

Я догадывался что это ты. Будь уж так добр, убери. На своем сайте пожалста, но не здесь. Писал бы чтоли продолжение Spacer-а, если заняться не чем. А не оффтопил других.

moka 07.09.2007 17:21

Re: elmax - набросок фреймворка
 
Хм, а линки во всех других эллементах тоже почистил?

jimon 07.09.2007 17:24

Re: elmax - набросок фреймворка
 
elmortem
такая да ..

а вот такая нет :
Код:

Type T1
        Field t:T2
        Field mem%[1000]
EndType
Type T2
  Field t:T1
        Field mem%[1000]
EndType

GCCollect()
DebugLog "start "+GCMemAlloced()

t_1:t1 = New t1
t_2:t2 = New t2

t_1.t = t_2
t_2.t = t_1

t_1 = Null
t_2 = Null

DebugLog "in work "+GCMemAlloced()
GCCollect()
DebugLog "final "+GCMemAlloced()

разруливается ето вот так :
Код:

Type T1
        Field t:T2
        Field mem%[1000]
       
        Method Free()
                t = Null
                mem = Null
        End Method
EndType
Type T2
  Field t:T1
        Field mem%[1000]
       
        Method Free()
                t = Null
                mem = Null
        End Method
EndType

GCCollect()
DebugLog "start "+GCMemAlloced()

For Local i% = 0 To 100
t_1:t1 = New t1
t_2:t2 = New t2

t_1.t = t_2
t_2.t = t_1

t_1.Free()
t_2.Free()

t_1 = Null
t_2 = Null
Next

DebugLog "in work "+GCMemAlloced()
GCCollect()
DebugLog "final "+GCMemAlloced()

можно конечно переопределять операторы New и Delete
но мне легче было зделать Free - так я 100% избавляюсь от перекрестных ссылок

elmortem 07.09.2007 19:10

Re: elmax - набросок фреймворка
 
jimon
Но ведь если в моём варианте t удаляется, то на t.t больше никто не ссылкается и он поидее должен удалиться. Разве не так?

johnk 07.09.2007 19:16

Re: elmax - набросок фреймворка
 
Лишняя профилактика не повредит :)

jimon 08.09.2007 00:00

Re: elmax - набросок фреймворка
 
elmortem
в твоем варианте - да
но все же, если тебе в одном месте понадобится такая фича,
то ты разве будеш менять >50 типов ? :-)
лутче все сразу продумать и потом не мучать голову

elmortem 09.09.2007 23:47

Re: elmax - набросок фреймворка
 
у меня вроде бы не используются перекрёстные ссылки на объекты, не являющиеся основой фреймворка, а оные уничтожаются только при выходе из программы.

Тут небольшой ремонт затеяли, так что релиз альфы будет где-то в среду... (:

dimanche13 10.09.2007 14:27

Re: elmax - набросок фреймворка
 
жду альфу, может пригодиться и в моем проекте)))

elmortem 15.09.2007 00:30

Re: elmax - набросок фреймворка
 
И так, "почти-альфа"... (:
Что-то там какие-то косяки с памятью, пока не могу разобраться. Вроде кросс-линков нету, объект удаляю, но он не удаляется нифига. ):

Документацию начну делать, как только свободное время появится. Но если кому не сложно может пока так посмогтрите, может я чего-то просто не вижу и поэтому там память теряется. ):

Version 0.0.6 (14.09.2007)
* Упростилась общая структура движка.
* У CLua теперь есть метод ExecFunc, выполняющий функцию скрипта по имени.
+ GUI контролы чекбокса (CGuiCheck) и изображения (CGuiPicture).
* GUI контролы-кнопки (CGuiButton и CGuiTextButton) поддерживают указание имени функции скрипта на исполнение при нажатии.
+ Добавлен класс, отвечающий за ввод даных (CInput).

dimanche13 15.09.2007 14:46

Re: elmax - набросок фреймворка
 
Код:

Field Gui:CGui = Null
объявлять не обязательно он и так по умолчанию null. Начальное меню классное! Но глючит неимоверно, прападает тайтл окна(!) при выборе,опять же пункта Second, в окне с вертикальным баром горизонтальные линии становятся красными. Окно ввода имени прибито гвоздями. Порадовали кнопки и радиобоксы. Сам рисовал? Честно говоря, метод Delete вроде как деструктор, мне вызвать никак не удавалось. Ни принудительно ,ни занулив объект. Может поэтому что-то с памятью. Проверь вызывается ли Free/


Часовой пояс GMT +4, время: 20:45.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot