Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Куда девается память ? (http://www.flasher.ru/forum/showthread.php?t=139241)

Anton Bel 26.04.2010 15:39

Куда девается память ?
 
Я раньше писал на С++ и привык что память нужно удалять самому. Теперь пишу на АС и не уверен в правильности работаты с памятью. Концепция Garbage Collector, хорошая, но детали ей работы не понятны. Например такой код.

Код AS3:

  var s:Sprite = new Sprite(100,100);
 // some code
  s = new Sprite(100,100);

Куда девался первый спрайт, GC удалит его из памяти или будет memory leak.

etc 26.04.2010 15:45

Удалит.

з. Ы. У спрайта нет аргументов в конструкторе.

BlooDHounD 26.04.2010 15:47

если остались ссылки, то будет утечка.
Код AS3:

var s:Sprite = new Sprite();
var s2:Sprite = s;
s = new Sprite()

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

Crenth 26.04.2010 15:58

АС3 в этом плане оч интересен. тут надо не меньше чем в сях следить за памятью.
Если не юзаете больше объект, удалите сначала все, что на него навесили, а потом сделайте объект = NULL;
Причем, перед тем, как кончать навеску, проверьте
if (объект !== NULL) { мочить все! }


а вот вам еще пример "утечки":

этот код
Код AS3:

moveTo(0,0); lineTo(0,100);
moveTo(0,0); lineTo(0,100);
moveTo(0,0); lineTo(0,100);

съест памяти втрое больше, чем этот
Код AS3:

graphics.clear();
moveTo(0,0); lineTo(0,100);
graphics.clear();
moveTo(0,0); lineTo(0,100);
graphics.clear();
moveTo(0,0); lineTo(0,100);


Anton Bel 26.04.2010 16:15

А если так

Код AS3:

var obj:Object = new Object();
obj.Img = new Sprite(100,100);
// some code
obj = new Object();

Куда уйдет Sprite ? Это ошибка ?

mickfallout 26.04.2010 16:20

если в some code ничего существенного не будет - всё нормально, ссылки не станет, объект удалится(может быть, когда-нибудь, когда GC сочтёт что так надо).

Anton Bel 26.04.2010 16:26

Ну а если так

Код AS3:

public var s:Sprite = new Sprite(100,100);
 
function SomeFunction()
{
  var s2:Sprite = s;
  s2.x = 100;
}
 
// some code
 
s = null;

Надеюсь, тоже ничего плохого не будет и память удалится.

BlooDHounD 26.04.2010 17:02

Anton Bel, откуда Вы берёте 100,100 в параметрах?

Crenth 26.04.2010 17:02

а к чему такие махинация с объявлениями экземпляров ?

можно подробнее ?

Anton Bel 26.04.2010 17:12

Это код для примера. Придумываю на ходу. Sprite тоже класс для примера, можно использовать Sprite2, если хотите.

Вопрос только об управлении памятью.


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

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.