В моем текущем коде у меня есть что-то вроде этого
while(true) //Infinite loop
{
char buff[60];
.....
....
}
Я хотел знать, что будет лучше в плане производительности.
memset(buff, 0, 60);
или жеЗамечания:
Мое требование заключается в том, что мне нужно иметь char
массив полностью очищается при каждом перезапуске цикла.
«Так оно и есть» не дает массив, полный нулей. Но вам не нужно звонить memset
тем не мение. Если вы только использовать buff
внутри цикла, я думаю, что лучше держать его в рамках цикла:
while(true) //Infinite loop
{
char buff[60] = {}; // buff is full of zeros
.....
....
}
memset
делает некоторую работу, поэтому она должна «влиять на производительность». Хотя, как правило, он сильно оптимизирован, потому что это обычная операция.
Вы вряд ли найдете более быстрый способ очистки массива из-за этого, и для сравнения код, который вы показали, делает не инициализировать массив вообще.
Для справки, это должно выглядеть примерно так:
char buff[60];
while (true) {
memset(buff, 0, sizeof(buff));
...
Единственное решение, которое может быть быстрее, — это найти способ остановиться в зависимости от обнуления буфера в начале каждой итерации.
Если вы последовательно используете его как строку стиля C:
char buff[60];
buff[0] = 0;
Это установит только первый байт, но если вы используете его как простую строку в стиле C, это все, что вам когда-либо нужно установить, чтобы сделать строку нулевой длины. Это быстрее, чем любое решение, которое заполняет весь буфер, вероятно, в 7 раз на 64-битной машине.
Если вам действительно нужен весь буфер, заполненный 0, то
char buff [60] = {};
сделаю это.