Модераторы: Aliance, skyboy, MoLeX, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Максимальная длина строки PHP, Собственно сабж 
V
    Опции темы
sTa1kEr
Дата 5.10.2009, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 5
Всего: 146



Вы не учли
Цитата(sTa1kEr @  5.10.2009,  14:04 Найти цитируемый пост)
значение указывающие на более, чем одну переменную

У вас же: одна переменная - одно значение. Вот если бы у вас было
Код

$a = $b = $c = $d = str_repeat('1234567890', 1024*1024);

Тогда бы все 4 переменных указывали на одно значение и что бы передать одну из них по ссылке PHP пришлось бы скопировать значение.
Немного другой пример, демонстрирующий обратное действие:
Код

function test1(&$a) {
    var_dump(memory_get_usage()); // int(10600736)
    _print($a); // Здесь можно было бы написать print($a) или echo $a, эффект был бы тот же.
}

function _print($value) {
    var_dump(memory_get_usage()); // int(21086056) - в два раза больше!
}

$a = str_repeat('1234567890', 1024*1024);
var_dump(memory_get_usage()); // int(10600736)
test1($a); 

Здесь переменная сразу передается по ссылке, но при попытке вывести ее она будет скопирована, т.к. _print принимает параметр не по ссылке. Если бы функция test1 тоже принимала параметр по значению, то переменную не пришлось бы копировать и памяти было бы затрачено столько же int(10600736)
Код

function test1($a) {
    var_dump(memory_get_usage()); // int(10600736)
    _print($a); // Эмуляция echo, или print
}

function _print($value) {
    var_dump(memory_get_usage()); // int(10601296) -- те же 10мб памяти!
}

$a = str_repeat('1234567890', 1024*1024);
test1($a); 


Добавлено @ 15:10
Цитата(NewDima @  5.10.2009,  15:32 Найти цитируемый пост)
Вы измеряете используемую память в каждый данный момент.

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

Это сообщение отредактировал(а) sTa1kEr - 5.10.2009, 16:07
PM MAIL   Вверх
NewDima
Дата 5.10.2009, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 922
Регистрация: 20.2.2006
Где: <?here?>

Репутация: -1
Всего: 12



Код

$a = $b = $c = $d = str_repeat('1234567890', 1024*1024);

Цитата

strlen is 10485760
Passing by reference with changing
int(10486104)
Passing by reference without changing
int(10485776)
Passing by value with changing
int(10485776)
Passing by value without changing
int(0) 

Обратите, пожалуйста, внимание на последнее значение

Добавлено через 8 минут и 22 секунды
NewDima, что-то я подзапутался
PM ICQ   Вверх
sTa1kEr
Дата 5.10.2009, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 5
Всего: 146



Цитата(NewDima @  5.10.2009,  16:45 Найти цитируемый пост)
Passing by value without changing
int(0) 

ЧТД. Именно про это я и говорил.

Это сообщение отредактировал(а) sTa1kEr - 5.10.2009, 16:04
PM MAIL   Вверх
NewDima
Дата 5.10.2009, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 922
Регистрация: 20.2.2006
Где: <?here?>

Репутация: -1
Всего: 12



Если кому интересно, составил табличку сравнения
user posted image
Левый столбец - при существующей ЕДИНСТВЕННОЙ ссылке значение
Код

$a = str_repeat('1234567890', 1024*1024); 

Правый столбец - при двух ссылках, одна из которых не используется вообще
Код

$a=$b= str_repeat('1234567890', 1024*1024);   


Это сообщение отредактировал(а) NewDima - 5.10.2009, 17:34
PM ICQ   Вверх
Gro577
  Дата 2.3.2017, 08:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 17.10.2010

Репутация: нет
Всего: нет



Уважаемый Ипатьев.  Немогу не заметить вашу ценность ваших ответов. Они не имеют ни малейшего отношения к вопросу, описанному в теме.  У админов прошу прощения за флуд. Просто крик отчаяния уже от подобных комментаторов.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Тексты | Следующая тема »


 




[ Время генерации скрипта: 0.1326 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.