Невозможно сказать наверняка, не видя больше, но кажется, что вы можете избежать memcpy
и вместо этого использовать указатель для просмотра данных.
struct_wld_basic_frag *frag = (struct_wld_basic_frag *)wld;
for (i=0; i<header.fragmentCount; i++)
errorlog.OutputSuccess(fragment_strings[frag[i].id], i);
На данный момент я предположил массив строк для разных типов фрагментов, как рекомендовано @Chris и @Ates. Даже в худшем случае это улучшит удобочитаемость и удобство обслуживания без ущерба для скорости. В лучшем случае это может (например) улучшить использование кэша и значительно повысить скорость - одна копия кода для вызова errorlog.outputSuccess
вместо 30 отдельных копий может освободить место для множества других «вещей» в кэше ,
Если вы не копируете данные каждый раз, гораздо больше шансов на успех. В то же время, я, вероятно, должен добавить, что возможно , чтобы это могло вызвать проблему - если данные неправильно выровнены в исходном буфере, попытка использовать указатель не будет работать.