char buffer[424242] = {0};
Является buffer[index]
так быстро как *buffer
?
for (int i = 0; i < SIZE; ++i) {
buffer[i] = 42;
}
char* end = buffer + SIZE;
for (char* pos = buffer; pos != end; ++pos) {
*pos = 42;
}
Я предполагаю, что мой вопрос заключается в том, есть ли какая-либо инструкция по сборке, которая может установить позицию в памяти плюс и сместить на заданное значение в одном цикле?
LEA, кажется, загружает адрес и умножает его таким образом.
*buffer
по крайней мере так же быстро, как buffer[index]
, Зависит от index
, Если index == 0
, они будут одинаково быстры
Согласно вашему редактированию:
char& end = buffer + SIZE;
for (char* pos; pos != end; ++pos) {
*pos = 42;
}
вызывает неопределенное поведение, потому что вы не инициализируете pos
,
Согласно вашему второму редактированию:
Сначала напишите свой код для удобства чтения, профиль & возможно, изменится только после того, как у вас есть конкретные результаты.
for (int i = 0; i < SIZE; ++i) {
buffer[i] = 42;
}
это более читабельно, придерживайтесь его.
Не уверен, что это ответ, который вы ожидаете, но есть ли у вас проблемы с производительностью, чтобы решить?
Ваш список тегов вопросов содержит «оптимизацию»: я был бы очень удивлен, если бы единственной доступной оптимизацией в вашем коде был выбор между написанием *buffer
или же buffer[]
,
Если у вас действительно есть проблема с производительностью, вы должны сначала профилировать свой код, чтобы выяснить, что является узким местом.