Я хочу удалить весь массив. В настоящее время я делаю @array=();
Удаляет ли эти элементы и очищает память, сбор мусора? Если мне не нужно использовать Splice ?.Удаление элементов массива в Perl
ответ
Очень странно, что вам нужно это сделать. Правильное использование
my
означает, что очень редко требуется очистить массив.@array =();
освобождает элементы и при необходимости вызывает любые деструкторы. Другими словами, элементы будут собирать мусор (до завершения операции), если они не используются в другом месте, по желанию.@array =();
не освобождает базовый буфер массива. Это хорошая вещь.undef @array;
заставит память освободиться, что приведет к многочисленным выделениям, когда вы начнете вкладывать больше элементов в массив.
Так,
Если вы хотите освободить массив, потому что вы никогда не будете использовать его снова, ограничить сферу его применения, где вам это нужно, помещая
my @array;
в правильном месте ,{ my @array; ... } # Elements of @array garbage collected here.
Если вы хотите очистить массив вы будете использовать повторно использовать
@array =();
.my @array; while (...) { if (...) { push @array, ...; } else { ... use @array ... @array =(); # Elements of @array garbage collected here. } }
Не используйте
undef @array;
.
Вы можете использовать splice
, если это удобно.
say for @array;
@array =();
может быть написана как
say for splice(@array);
Но это не влияет на сбор мусора.
Спасибо большое за информацию. Я делаю цикл while, который вы разместили повторно, используя массив и очистив его до конца цикла. Я был обеспокоен тем, что если это не сбор мусора и память не освобождена, я собираюсь разгрузить память в цикле while. вы упомянули, что память не освобождается, когда я делаю @ array =(). Означает ли интерпретатор perl его только для сбора мусора? Когда я повторно использую массив, он перезаписывает ранее выделенную память и использует ее? – Arav
* Означает ли интерпретатор perl его только для сборки мусора? * Массив не может быть GC'ed, поскольку он все еще используется, даже если он пуст. * Когда я повторно использую массив, он перезаписывает более раннюю память, выделенную и используемую? * Да. Изменение массива изменяет память, используемую этим массивом. – ikegami
Может быть, вы думаете, ''() 'создает массив? Это не так. Это ничего не создает. Это просто заполнитель, чтобы ничего не значить. 'my @array;' создает массив. '[]' также создает массив (и возвращает ссылку на него). – ikegami
Большое спасибо за информацию – Arav
Если ваша цель - освободить память обратно в ОС, вам, вероятно, не повезло.Если ваша цель состоит в том, чтобы сделать память доступной для вашей программы perl, чтобы использовать ее снова, тогда все ответы будут хорошими.
Для получения более подробной информации некоторых проверьте следующие ссылки
http://www.perlmonks.org/?node_id=243025
In Perl, how can I release memory to the operating system?
- 1. Удаление элементов массива
- 2. Perl - удаление элементов из одного массива из другого массива
- 3. Perl: удаление элементов массива и изменение размера массива
- 4. Удаление элементов в массиве в цикле Perl
- 5. Удаление элементов в массиве perl без индекса
- 6. Удаление элементов массива из других элементов массива
- 7. замена элементов массива Perl
- 8. Perl элементов массива Вычитание
- 9. Удаление элементов массива
- 10. Удаление повторяющихся элементов массива
- 11. Удаление элементов из массива
- 12. Удаление элементов из массива
- 13. Удаление бесполезных элементов массива
- 14. Подсчет элементов массива в Perl
- 15. Удаление элементов массива в jquery
- 16. Возвращаемая сумма элементов массива perl
- 17. Perl сопоставление многомерных элементов массива
- 18. Удаление повторяющихся элементов из массива
- 19. Совпадение нескольких элементов массива Perl
- 20. Удаление некоторых элементов из массива?
- 21. Удаление элементов для сортировки массива
- 22. Удаление/поп элементов из массива
- 23. Удаление элементов из динамического массива
- 24. Удаление элементов из массива строк
- 25. Javascript Массивы - удаление элементов массива
- 26. Удаление некоторых элементов из массива
- 27. PHP: Удаление элементов из массива
- 28. Условное удаление элементов из массива
- 29. Удаление элементов из массива Ruby
- 30. Удаление повторяющихся элементов из массива
Я считаю, 'UNDEF @ array' идиоматичен, но то, что у вас есть дела тоже хорошо. – Nemo
Возможный дубликат [Что является лучшим способом удалить значение из массива в Perl?] (Http://stackoverflow.com/questions/174292/what-is-the-best-way-to-delete-a- value-from-an-array-in-perl) –
Кажется, что это не связано с удалением одного значения, если он пытается отменить весь массив. – Joe