| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > "Очистить" массив - как быстрее и правильнее |
| Автор: mspuz 1.3.2006, 12:39 |
| Если есть массив, например из 100 элементов и его нужно обнулять при каждой итерации. Раньше я просто создавал цикл, в котором каждому элементу массива присваивал ноль. А недавно познакомился с функцией SetLength, что натолкнуло меня на мысль, а почему не сделать так: SetLength(MyMas,0) SetLength(MyMas,100) По идеи должно сработать. Правильно ли это, быстрее ли это и вообще может существует другой, более рациональный подход |
| Автор: MBo 1.3.2006, 12:41 |
| Лучше сделать FillChar (или ZeroMemory), а SetLength приводит к операциям перераспределения памяти. |
| Автор: Budy 1.3.2006, 12:42 |
| SetLength - не какнает для Array'ев А для обнуления лучше всего прогонять циклом и занулять |
| Автор: Snowy 1.3.2006, 12:52 |
| MBo, именно так. Кроме того, от SetLength память не занулится, а забъется мусором. |
| Автор: Демо 1.3.2006, 12:55 |
| С каких пор? SetLength прекрасно можно использовать для динамических массивов. Хотя, как указал MBo, это не самая быстрая операция. Быстрее просто чистить память. Опять же, разовое перераспределение на небольших массивах не очень-то повлияет на скорость. |
| Автор: Yanis 1.3.2006, 12:57 |
| С чего бы это? Добавлено @ 13:00 При использовании SetLength новые элементы массива имеют значение 0. Разве нет? |
| Автор: Демо 1.3.2006, 13:24 |
| Memory leak |
| Автор: Rennigth 1.3.2006, 13:26 | ||
Сорри для DynArray делфя вот это юзает:
но, сути не менят. |
| Автор: Snowy 1.3.2006, 13:30 | ||
| Эт я погорячился. Посмотрел реализацию SetLength...
Добавлено @ 13:31 Но что-то мне говорит, что просто FillChar будет работать немножко быстрее |
| Автор: Rennigth 1.3.2006, 13:39 |
| Snowy, а эт ты где такое нашел?, у тя какая Делфя, у мя 6-ка. Добавлено @ 13:43 Вопрос отпал |
| Автор: Yanis 1.3.2006, 14:12 |
| В это в Delphi 7. |
| Автор: Budy 2.3.2006, 06:06 |
| Демо, |