Скажем, у меня есть такая структура:
struct tmp {
unsigned char arr1[10];
unsigned char arr2[10];
int i1;
int i2;
unsigned char arr3[10];
unsigned char arr4[10];
};
Что из этого будет быстрее?
(1) Memset устанавливает всю структуру в 0, а затем заполняет элементы как:
struct tmp t1;
memset(&t1, 0, sizeof(struct tmp));
t1.i1 = 10;
t1.i2 = 20;
memcpy(t1.arr1, "ab", sizeof("ab"));
// arr2, arr3 and arr4 will be filled later.
ИЛИ
(2) Отдельные переменные Memset:
struct tmp t1;
t1.i1 = 10;
t1.i2 = 20;
memcpy(t1.arr1, "ab", sizeof("ab"));
memset(t1.arr2, 0, sizeof(t1.arr2); // will be filled later
memset(t2.arr3, 0, sizeof(t1.arr3); // will be filled later
memset(t2.arr4, 0, sizeof(t1.arr4); // will be filled later
С точки зрения производительности, несколько вызовов в memset быстрее (для отдельных элементов структуры) быстрее / медленнее, чем один вызов memset (для всей структуры).