Трудно ответить с абсолютной уверенностью, так как это зависит от вашей цепочки инструментов и ваших уровней оптимизации и (в некоторой степени) от судьбы.
Возможно, я бы ожидал, что сильный компилятор оптимизирует ваш цикл до memcpy
, который не требует счетчиков и отдельных копий значений. Или, возможно, нет. Конечно, кажется, что вы этого не делаете.
Я бы определенно ожидал, что векторная копия сделает это (потому что тот, кто написал реализацию vector
, умен и заметил бы эту возможность).
В конечном итоге вам нужно будет прочитать исходный код реализации, чтобы узнать наверняка.
Если вы хотите скопировать содержимое double[]
как можно быстрее, используйте std::copy
.
Этот должен выполнить эту оптимизацию. Конечно, это не будет медленнее, чем ваш цикл, и может быть быстрее. Если по какой-то причине это не так, вы также можете попробовать прямой memcpy
(хотя это устраняет безопасность типов ?).
Почему memcpy
быстрее?
Компьютеры быстро разбрасывают блоки байтов за один раз, если они заранее знают, что это то, что вы хотите сделать.
На самом деле, это хороший урок по написанию кода, который «говорит, что вы имеете в виду» и позволяет компьютеру решать, как это сделать, вместо того, чтобы описывать отдельные шаги, которые, по вашему мнению, требуется для задачи, и, следовательно, усложнять ее. чтобы компьютер делал то, что вы действительно имели в виду наилучшим образом.
В этом контексте «компьютер» представляет собой аморфное сочетание стандартной реализации библиотеки, компилятора и ЦП.