[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Память, ООП изнутри
ZigZag
Здравствуйте, это мой первый пост на вашем форуме.

Есть тяга подходить к делу "изнутри", понимать как все работает, и возник вопрос т.к. толковой документации что то не смог найти.

Допустим есть код:
class MyClassHelper
{
// Много переменных

protected function test_1 ($name)
{
echo $name;
}

// Очень много функций
}


class MyClass extends MyClassHelper
{
// С десяток переменных

function __construct ($name)
{
parent::test_1($this);
}

// С десяток функций
}


$b = array();

for ($i = 0; $i < 10; $i++)
{
$b[] = new MyClass();
}


Как он будет размещаться в памяти? Сколько занимают функции памяти?

Конкретно в моем примере интерисует: в класс MyClassHelper допустим я выношу кучу функций, огромное количество, а класс MyClass их использует и состоит их пары десятков функций и переменных, сэкономлю ли я на памяти выделяемой скрипту? Или можно поместить все функции в класс MyClass и не париться с наследованием все равно в памяти функции будут занимать место и так и так?
С каждым новым созданным классом будет ли память заниматься на создание и расположение одинаковых функций которые внутри класса? Имеет ли смысл использовать наследование класса дабы избежать создания лишнего байт кода в памяти?

И вообще посоветуйте пожалуйста внятный мануал по подробному разбору памяти процессов пхп скриптов, адрес гугла знаю можете его не рекомендовать =)
Функцию memory_get_usage не рекомендовать, на xdebug много времени уйдет, хотелось бы почитать а не собственными тестами выводить (



Спустя 22 минуты, 3 секунды (26.03.2010 - 14:48) vagrand написал(а):
Функции занимают в памяти, грубо говоря, ровно столько места сколько в них буков.
Волновать тебя должны не функции а размер переменных, вот он может варьироваться в зависимости от того сколько и чего ты туда грузишь.

Спустя 4 минуты, 49 секунд (26.03.2010 - 14:53) glock18 написал(а):
Цитата (vagrand @ 26.03.2010 - 11:48)
Функции занимают в памяти, грубо говоря, ровно столько места сколько в них буков.


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

Спустя 4 минуты, 53 секунды (26.03.2010 - 14:58) ZigZag написал(а):
Мое приложение на PHP висит в памяти неделями-месяцами без перезагрузки, и хочеться погоняться за экономией занимаемой памяти, если дубликатов класса создать не 10, как в примере, а 10000? функции в памяти расплодятся в случае выноса их в отдельный класс и наследовать им остальные?

С оптимизацией хранимых данных уже давно вопрос решен, теперь стараюсь оптимизировать код

Спустя 12 минут, 32 секунды (26.03.2010 - 15:11) vagrand написал(а):
Цитата
Мое приложение на PHP висит в памяти неделями-месяцами без перезагрузки


Что же это у тебя за скрипты такие, что время их выполнения измеряется в неделях и месяцах?

Цитата
если дубликатов класса создать не 10, как в примере, а 10000? функции в памяти расплодятся в случае выноса их в отдельный класс и наследовать им остальные?


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

Цитата
С оптимизацией хранимых данных уже давно вопрос решен, теперь стараюсь оптимизировать код


Оптимизировать код нужно, с этим никто не спорит, но оптимизировать надо ни столько его количество сколько время его выполнения.

Спустя 3 часа, 34 минуты, 57 секунд (26.03.2010 - 18:46) ZigZag написал(а):
Цитата
Что же это у тебя за скрипты такие, что время их выполнения измеряется в неделях и месяцах?

Управляет соединениями, перебрасывает с tcp на udp по своему протоколу.

Цитата
Код методов класса не расплодится, хотя да если ты создашь 10000 экземпляров, даже пустых, то память они займут как 10000. Но весь смысл оптимизации какраз и заключен в том чтобы не создавать такое большое количество. Я себе не могу навскидку представить задачи где одновременно необходимо было бы держать в памяти для одного экземпляра скрипта такое огромное количество объектов.

10000 это я цифру от балды привел, штук 20-30 таких класов одновременно у меня создано будет.

Спустя 17 минут, 47 секунд (26.03.2010 - 19:03) glock18 написал(а):
Цитата (ZigZag @ 26.03.2010 - 15:46)
Управляет соединениями, перебрасывает с tcp на udp по своему протоколу.


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

Спустя 17 часов, 25 минут, 1 секунда (27.03.2010 - 12:28) ZigZag написал(а):
Цитата

Цитата (ZigZag @ 26.03.2010 - 15:46)
Управляет соединениями, перебрасывает с tcp на udp по своему протоколу.


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


Так и думал что тема уйдет от своей сути в оффтопик )
У меня свои взгляды на этот вопрос, и меня не переубедить. Давайте не будем офтопить а предлогаю совместными усилиями подробненько покопаться в процессах пхп и разобраться как работает zend машина.

Спустя 36 минут, 36 секунд (27.03.2010 - 13:05) DedMorozzz написал(а):
на форуме, в курсах, была тема, как раз Глока, об организации памяти. Возможно это ккраз то, что бы ищешь

Спустя 1 день, 3 часа, 33 минуты, 10 секунд (28.03.2010 - 15:38) ZigZag написал(а):
Еще такой вопрос, почти по теме, почему каждый раз при загрузке одного и того же скрипта с бесконечным циклом он занимает различный обьем памяти?


_____________
i like network programming

R270121804964
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.