У меня есть существующий массив 1D, это memset
самый быстрый способ его обнулить?Каков самый быстрый способ обнуления существующего массива?
ответ
Самый быстрый ... возможно, да. Багги почти уверены!
В основном это зависит от реализации, платформы и ... какого типа содержит массив.
В C++, когда переменная определена, вызывается ее конструктор. Когда массив определен, вызываются все конструкторы элементов массива.
Вычистить память можно считать «хорошим» только для случаев, когда известно, что тип массива имеет начальное состояние, которое может быть представлено всем нулем и для которого конструктор по умолчанию не выполняет никаких действий.
Это вообще true для встроенных типов, но также и для других типов.
Самый безопасный способ - назначить элементы с инициализацией по умолчанию.
template<class T, size_t N>
void reset(T* v)
{
for(size_t i=0; i<N; ++i)
v[i] = T();
}
Обратите внимание, что, если Т char
, функция инициализирует и переводит точно так, как memset
. Так что это такая же скорость, не больше, не меньше.
Платформа: Windows, Тип: float, Размер: 1e6. Кроме того, скорость работы - это первый приоритет, даже важный, чем безопасность. – Shibli
@Shilbli: может быть, приведенный выше шаблон может быть еще лучше: memset устанавливает байты. мои функции устанавливают float, которые имеют одинаковый размер слова процессора. Если у компилятора есть хорошая оптимизация (стимуляция i в регистре и сохранение T() в качестве постоянной внешнего цикла), может быть даже быстрее, чем неспециализированный memset! Но это в основном зависит от компилятора, а не от библиотеки. –
Это можно сделать с помощью стандартной библиотеки, используя 'std :: fill_n'. – Blastfurnace
Это невозможно узнать, потому что это конкретная реализация. Вообще-то, хотя, memset
будет самым быстрым, потому что разработчики библиотеки потратили много времени, оптимизируя его очень быстро, и иногда компилятор может делать оптимизацию на нем, что невозможно сделать в ручных реализациях, потому что он знает то есть от memset
.
Не говоря уже о встроенных функциях, если они поддерживаются. –
Для очень больших массивов 'calloc' может быть быстрее, используя возможности управления хранилищем целевой машины. Но никак не знать, не врываясь в грязные внутренние органы. –
@HotLicks он сказал «существующий массив» –
- 1. Каков самый быстрый способ создания массива uniq?
- 2. Каков самый быстрый способ сравнить патчи массива?
- 3. Какой самый быстрый для обнуления массив?
- 4. Самый быстрый способ к нулю
- 5. Каков самый быстрый способ перефразировать?
- 6. Каков самый быстрый способ перезаписи файла?
- 7. Самый быстрый способ расширения массива
- 8. Каков самый быстрый способ сгруппировать мои записи?
- 9. Каков самый быстрый способ скопировать мой массив?
- 10. Каков самый быстрый способ сравнить два байтовых массива?
- 11. Каков самый быстрый способ инициализации целочисленного массива в python?
- 12. Каков самый быстрый способ умножения массива квадратичной формы numpy?
- 13. Каков самый быстрый способ обновления упорядоченного массива чисел?
- 14. Каков самый быстрый способ инициализации всех элементов массива в NaN?
- 15. Каков самый быстрый способ преобразования массива поплавков в строку?
- 16. Каков самый быстрый способ вычисления скользящего среднего массива с Ruby?
- 17. Каков самый быстрый способ сортировки массива из 7 целых чисел?
- 18. Каков самый быстрый способ получить определенный раздел массива? JS
- 19. Каков самый быстрый способ скомпилировать телефонный код?
- 20. Каков самый быстрый способ распараллеливать код?
- 21. Каков самый быстрый способ разобрать текст?
- 22. Каков самый быстрый способ подвести список Interger
- 23. Каков самый быстрый способ получить случайный MPMediaItem
- 24. Каков самый быстрый способ предварительной обработки данных?
- 25. Каков самый быстрый способ обнаружения отсутствующих событий?
- 26. Каков самый быстрый способ умножения матрицы?
- 27. Каков самый быстрый способ сравнить две таблицы?
- 28. Каков самый быстрый способ реализовать фон UIView?
- 29. Каков самый быстрый способ рендеринга JPanel?
- 30. Каков самый быстрый способ получить элемент dom?
Связанный: http://stackoverflow.com/questions/8528590/what-is-the-advantage-of-using-memset-in-c – Mysticial
Да, это самый быстрый. Все члены mem ... ребята быстры, потому что они понимают, как задавать слова назначения, а также байты назначения. То есть, когда, например, четыре нулевых байта должны быть перемещены в слово памяти, memset очищает ячейку памяти за один раз. В качестве бонуса memset, memmove и memcopy являются переносимыми. –
'memset' установит все биты в 0, но это может быть не всегда так, как вы хотите. Вы заботитесь о переносимости? Что в массиве? –