передача большого массива

Kirill

Новичок
передача большого массива

Есть класс А у которого одно из св-в большой массив. Класс А переодически вызывает функцию С из класса В (экземпляр класса В создается в А в конструкторе). Данной функции передается этот большой массив (она его не возвращает, т.е. изменения в нем не нужны). При передаче параметров по ссылке передается ссылка на область памяти, а не сами данные. Если я буду передавать данный массив по ссылке - я сэкономлю память?
 

hermit_refined

Отшельник
смотря что с массивом эта функция делает.
между прочим, если массив настолько большой, что создание его копии критично для памяти, и речь идёт о web, то... советую вам найти способ не загружать его в скрипт вовсе.
 

Kirill

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

-~{}~ 19.02.07 18:16:

p.s. так про передачу параметров по ссылке я прав?
 

AmdY

Пью пиво
Команда форума
естественно, ну не заводить же парочку копий.
 

Андрейка

Senior pomidor developer
Kirill
он и так передаецца "по ссылке", если его не мучить.. и не забивай се голову такими вопросами без необходимости
 

hermit_refined

Отшельник
Kirill
это не совсем то, что я спрашивал, ну да ладно.
грубо говоря, с одной стороны - COW. копия создается только при модификации переменной (причем при модификации массива - копируется только сам массив, для элементов копии не создаются). потому - неправы.

с другой - модификация массива - это в том числе и манипуляции с его внутренним указателем, т.е. foreach, each, next, etc. в отличии от, например, перебора классическим циклом for.

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

Kirill

Новичок
массив обхожу с помощью for. Кажется потому, что сейчас ничего не тормозит, ибо массив маленьки, но вполне возможно, что в будущем, если подсунуть большой массив - будет тормозить.

Где про это можно прочитать? (на русском)
 

hermit_refined

Отшельник
сейчас ничего не тормозит
тогда вы не должны думать об этом. совсем. и не надо там for.
или правда верите, что можете безошибочно определить кусок кода, который будет в будущем тормозить?..
(а если уж вам снятся кошмары - вы не можете создать предполагаемого размера массив и проверить?)

единственно, чего надо избегать - это пессимизации. например, я не уверен, что вам вообще там нужен перебор массива.
Где про это можно прочитать? (на русском)
об этом и не на русском подробно не прочитаете.
но что-то в гугле по COW + php найдете.
 
Сверху