Разработка динамических сайтов
SEO услуги
Управление контекстной рекламой

Вход на хостинг

Имя пользователя:*

Пароль пользователя:*

IT-новости

20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла

Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......

подробнее

30.07.2015 Ищем уникальный контент для сайта

Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......

подробнее

11.05.2015 Распространённые ошибки разработчиков сайтов

Не секрет, что в сети Интернет насчитывается миллионы сайтов, и каждый день появляются тысячси новых......

подробнее

Метод DESTROY остался без изменений. Вызываться он будет в тех же случаях и обеспечит такие же функции, как и в предыдущем примере.

Я бы не стал говорить, что какой-то из двух приведённых методов решения проблемы лучше, а другой хуже. У каждого есть свои преимущества и недостатки. Первый длинноват, но код последователен и легко читается. Второй компактен, но менее универсален и его логику понять сложнее (вернее, сложнее разглядеть в нём объектно-ориентированный подход). Первый код работает чуть медленнее, поскольку переменная связана. Второй работает чуть быстрее, но допускает выполнение бессмысленных действий, например:

 $ring=7;

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

Гораздо интереснее задать другой вопрос: насколько надёжна наша защита от утечек памяти? Не будем наивны, она тоже небезупречна и болеет теми же болезнями, что и однострочная программа из самого первого листинга.

Не будем далеко ходить за примером и чуть модифицируем тело цикла из последнего листинга:

...

21: # ОСТОРОЖНО! УТЕЧКА ПАМЯТИ!

22: while (1) {

23:     my $ring=create_ring(10);

24:     my $a;

25:     $ring->[0]{'value'}=$a;

26:     $a=$ring;

27: }

Утечка произошла по той же самой причине, что и обычно. Когда выполнение блока подходит к концу и наступает время собрать мусор, система сборки обнаруживает, что на кольцевую структуру ссылаются две переменных: $ring и $a. Вторую уничтожить не получается, потому что на неё имеется ссылка. Где эта ссылка находится, система сборки мусора уже не разбирается, но мы-то знаем, что она содержится в недрах структуры $ring. Круг замкнулся, система сборки мусора снова не заметила наш мусор.

Теперь, я надеюсь, читатель видит и причины возникновения проблемы, и пути её решения.

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


Предыдущая страницаОглавлениеСледующая страница
 
[001] [002] [003] [004] [005] [006] [007] [008] [009] [010] [011] [012] [013] [014] [015] [016] [017] [018] [019] [020]
[021] [022] [023] [024] [025] [026] [027] [028] [029] [030] [031] [032] [033] [034] [035] [036] [037] [038] [039] [040]
[041] [042] [043] [044] [045] [046] [047] [048] [049] [050] [051] [052] [053] [054] [055] [056] [057] [058] [059] [060]
[061] [062] [063] [064] [065] [066] [067] [068] [069] [070] [071] [072] [073] [074] [075] [076] [077] [078] [079] [080]
[081] [082] [083] [084] [085] [086] [087] [088] [089] [090] [091] [092] [093] [094] [095] [096] [097] [098] [099] [100]
[101] [102] [103] [104] [105] [106] [107] [108] [109] [110] [111] [112] [113] [114] [115] [116] [117] [118] [119] [120]
[121] [122] [123] [124] [125] [126] [127] [128] [129] [130] [131] [132] [133] [134] [135] [136] [137] [138] [139] [140]
[141] [142] [143] [144] [145] [146] [147] [148] [149] [150] [151] [152] [153] [154] [155] [156] [157] [158] [159] [160]
[161] [162] [163] [164] [165] [166] [167] [168] [169] [170] [171] [172] [173] [174] [175] [176] [177] [178] [179] [180]
[181] [182] [183] [184] [185] [186] [187]

+7 (831) 413-63-27
ООО Дельта-Технология ©2007 - 2023 год
Нижний Новгород, ул. Дальняя, 17А.
Rambler's Top100