Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > BlitzMax > 2D-программирование

Ответ
 
Опции темы
Старый 15.09.2007, 23:18   #1
elmortem
Нуждающийся
 
Регистрация: 20.08.2007
Сообщений: 93
Написано 0 полезных сообщений
(для 0 пользователей)
Вопрос Менеджер памяти глючит

Вот, набросал тут маленький тестик...

SuperStrict

Type CBase
	Field Name:String = Null
	
	Method New()
		DebugLog("New CBase")
		Name = "CBase"
	EndMethod
	
	Method Delete()
		DebugLog("Delete CBase("+Name+")")
		Name = Null
	EndMethod
EndType

GCCollect()
DebugLog("   Mem Alloc: "+String.FromInt(GCMemAlloced()))

Local Base:CBase = New CBase
'Base.Name = "Base"
Base = Null

GCCollect()
DebugLog("   Mem Alloc: "+String.FromInt(GCMemAlloced()))
Если запускать как есть, то всё ок. Объект создаётся, затем объект уничтожается. Если убрать коментарий, то объект уничтожаться не хочет. Непонятно почему... Если коментарий не убирать, а сделать переменную Base глобальной - то же самое, объект не уничтожается.
Может кто-то объяснит мне причину и способ с этим бороться? Или это всё же косяк Макса?

У кого есть доступ на офф.форум - может зададите этот вопрос? Был бы очень признателен.
(Offline)
 
Ответить с цитированием
Старый 15.09.2007, 23:58   #2
dimanche13
Мастер
 
Регистрация: 19.03.2007
Сообщений: 1,039
Написано 153 полезных сообщений
(для 252 пользователей)
Re: Менеджер памяти глючит

Ну дык, а я про что говорил. Может надо задавать не автоматическую сборку мусора, а все вручную GCSetMode(2) потом GCCollect(). вообще х.з. надо офф.сайт шерстить день потерять, а может два, для не зареганых там поиска нет...
(Offline)
 
Ответить с цитированием
Старый 16.09.2007, 00:50   #3
jimon
 
Сообщений: n/a
Re: Менеджер памяти глючит

попробуй несколько раз GCCollect() вызывать
 
Ответить с цитированием
Старый 16.09.2007, 07:01   #4
johnk
Легенда
 
Регистрация: 01.10.2006
Сообщений: 3,705
Написано 296 полезных сообщений
(для 568 пользователей)
Re: Менеджер памяти глючит

Если Delete() - встроенный деструктор, то не доверяй ему, переменуй этот метод и используй вместе Base = Null..может поможет
(Offline)
 
Ответить с цитированием
Старый 16.09.2007, 10:36   #5
elmortem
Нуждающийся
 
Регистрация: 20.08.2007
Сообщений: 93
Написано 0 полезных сообщений
(для 0 пользователей)
Re: Менеджер памяти глючит

Не помогает. Т.к. многие объекты создаются и удаляются автоматически.
Т.е. из локальной переменной сразу в TList, а затем просто очисткой TList. К тому же, заналливание всех полей объекта не гарантирует очистку памяти под сам объект. Так что это не выход, это так...
(Offline)
 
Ответить с цитированием
Старый 16.09.2007, 11:45   #6
jimon
 
Сообщений: n/a
Re: Менеджер памяти глючит

что значит не помогает ?! если руки не от туда растут
то есно что не поможет

у меня проект очень хорошо оперирует мегабайтами
внутри блицмакса ... и все тут же хорошо освобождается
и вообще утечек нет

я уже приводил пример,
все что создается имеет функцию Create
и все что удаляется имеет метод Free
задача Free тупо удалить все что внутри обьекта

потому если у тебя список TList таких обьектов
то сначала у всех вызови Free, а потом уже очисти список и приравняй его к нулю

все дело в глобальности подхода,
у меня такая система используется абсолютно во всех типах игры
потому утечек нету
 
Ответить с цитированием
Старый 16.09.2007, 16:05   #7
elmortem
Нуждающийся
 
Регистрация: 20.08.2007
Сообщений: 93
Написано 0 полезных сообщений
(для 0 пользователей)
Гм...
В общем заборол большую часть утечек. Буду думать дальше.
Интересный факт: если запихнуть создание и удаление глабального объекта в функцию, то всё работает. Т.е. не стоит создавать глобальные объекты "глобально"... (:
Так что распихал пока всё по функциям. (:

Всем этим умным указателям реально не хватает принудительного delete. Ну очень не хватает...
(Offline)
 
Ответить с цитированием
Старый 16.09.2007, 18:52   #8
jimon
 
Сообщений: n/a
Re: Менеджер памяти глючит

elmortem
если хочешь помучатся в добавок
посмотри в blitzmax\mod\brl.mod\blitz.mod\blitz_gc.h и c
там есть две команды bbGCRetain и bbGCRelease
и собсно bbGCFree

первые две управляют через щетчик использований
последняя тупо трет участок памяти

можно зделать какой нибудь дебаг
перебрать все обьекты на уровне либы и узнать что-же не удаляется
 
Ответить с цитированием
Старый 16.09.2007, 22:04   #9
elmortem
Нуждающийся
 
Регистрация: 20.08.2007
Сообщений: 93
Написано 0 полезных сообщений
(для 0 пользователей)
Re: Менеджер памяти глючит

Ну, узнать что не удаляется можно просто пересчитав в логе создавшиеся и удалившиеся объекты... (:
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
утечка памяти!? Coks 3D-программирование 9 09.01.2010 21:18
Менеджер ресурсов dimanche13 BlitzMax 1 12.12.2007 14:11
Файловый Менеджер Ваня1993 Основной форум 4 08.10.2007 08:21
Отменный пожиратель памяти c0mrad 2D-программирование 2 03.02.2007 22:37
менеджер загрузки (процессы) impersonalis Болтовня 0 11.10.2006 16:09


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com