![]() |
Классы и память
Очень извиняюсь за не очень точное название, но в который раз убеждаюсь,
что знай ты правильное название, ответить на этот вопрос способен сам, в большинстве случаев. Вопрос вот какой - я не знаю, что происходит при создании экземпляра класса и какую память он занимает. Вот знаю я, что при создании, классу выделяется память для переменных и сам он тоже занимает место, но в какой памяти? Это был первый вопрос, а второй - у меня в примере класс, в его теле объявлено сотни переменных. Как понимаю я, что при создании, память будет выделена только на сам класс и сотни переменных, это так? А при клике создастся много graphics-ов и bitmap-ов и они тоже станут занимать место. Но у меня мысли, что я могу заблуждаться и память на все виды занимается при создании экземпляра... Вобщем скажите пожалуйста, как это всё происходит. Код AS3:
|
Цитата:
Ну допустим, везде где Вы сказали "класс" имелся в виду экземпляр приведенного класса. //здесь обьявлены сотни переменных - (членов класса) — будет выделен кусочек памяти каждой для хранения числа или ссылки (то есть тоже числа, адреса первого бита объекта в памяти). // здесь создаю циклом сто graphics-ов — нет, не создаете. Создать экземпляр Graphics нельзя. // и тут же я создаю много bitmap-ов — имелись в виду, видимо, битмапдаты. Конечно, займут память (а как иначе? Картинка есть, а память не занимает? Магия))) Что-то подобное возможно, если битмапы будут использовать одну битмапдату, тогда память под данные пикселов будет занимать только она. Но экземпляры Bitmap, конечно, тоже (у них же есть собственные свойства (не пиксели изображения), а значит и данные). // и тут я эти graphics-ы и bitmap-ы присваиваю ста переменным — Вы присваиваете ста переменным ССЫЛКИ на Добавлено через 5 минут Цитата:
Члены класса никуда не могут деться, они статические (не в смысле static). Локальные переменные — динамические. Они могут быть созданы, а могут и нет (метод, которому они принадлежат, так и не будет вызван за всю жизнь приложения). Так зачем нужна память под них? |
Цитата:
Цитата:
Цитата:
Добавлено через 14 минут Цитата:
Цитата:
битмапдат, то экземпляр этого класса, можно создать когда хочешь и он не окажет особого влияния на память. Так как: Цитата:
но второй голос говорил - А вдруг программа с созданием экземпляра класса, начнёт и в методах всё рассчитывать и суммировать. Спасибо Вам за помощь! |
Цитата:
Добавлено через 10 минут Если в теле класса объявлена Код AS3:
Но если у Вас в обработчике клика написан цикл Код AS3:
|
Вопрос топик стартеру:
А зачем вам сведения о занимаемой памяти? P.S.И вопрос некоторым завсегдатаям форума: зачем вам сравнивать скорость работы той или иной функции? |
Цитата:
|
Wolsh Вам надо книги писать! Спасибо!
Цитата:
|
Цитата:
Экземпляр то библиотечного класса создаётся каждый раз и занимает несколько байт, но блок памяти под картинку выделяется только перед попыткой изменить. Уже несколько лет назад адобовцы такую оптимизацию сделали. Ну а если вы пишите new BitmapData(100, 100) - то тут уж сразу кусок выделяется. Они пошли дальше: Загружаю картинку, отображаю на экране (не копируя в новую битмапу) - появляется на экране - начинает есть память, сдвигаю за пределы экрана - перестаёт (Видимо jpeg распаковывают только когда надо, да ещё и убирают когда не используется) Поначалу даже не понял в чём дело - загрузил разные блоки 2000x2000x24 - считаю - должно получиться +n мегабайт, смотрю в диспетчере задач - флешплеер всего ест в полтора раза меньше чем одни только эти распакованные картинки должны жрать. |
Цитата:
Здорово! |
Цитата:
Я говорил про библиотечные картинки, которые в swf хранятся в png или jpeg формате Вооще да. Если взяли, создали new MyImageBitmapData(), не показали, не поменяли - выделяться не должно. Однако, не факт что "невыделение/освобождение" памяти происходит всегда, оно может происходить при хитрых условиях(нехватка памяти, например) А факт: Отсутствие перерисовки загруженных из сети или из библиотеки картинок нехило экономит память. |
| Часовой пояс GMT +4, время: 05:03. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.