[an error occurred while processing this directive]
|
А что там у вас ещё есть? С остальными данными можно поступить так: либо в виде таких же массивов сделать, либо вот так:
struct all_other_fields {
some_field1;
some_field2;
...
}
struct my_struct_of_arrays {
ucRefFrameNum_LIST_0[16];
ucRefFrameNum_LIST_1[16];
ucRefFrameIndex_LIST_0[16];
ucRefFrameIndex_LIST_1[16];
all_other_fields other_fields[16];
}
my_struct_of_arrays variable;
По поводу онлайн ресурсов. Я, честно говоря, не встречал чего-то такого специализированного. Просто сейчас мало кто парится о скорости - по всей видимости только разработчики игр. Вот по игровой тематике можете поискать в инете хотя бы эти книги:
1) Graphics Programming Black Book (by Michael Abrash) - помимо оптимизационных приёмов для 3Д графики содержит и концептульные вещи
2) Game Programming Gems - есть по крайней мере 2 тома. Это сборники статей на околоигровую тематику. Там и графы, и ИИ, и 3Д и прочее прочее прочее.
PS. посмотрел в даташите на C64х ядро - вроде как за один такт может выполняться аж два доступа к памяти по 64 бита (по алресам выровненным на 8 байт), то есть ранее приведенный мной код будет выполняться так:
const long long MAGIC_VALUE = (INVALID_REF_FRAME<<56) | (INVALID_REF_FRAME<<48) | .... INVALID_REF_FRAME;
inline void foo(my_struct_of_arrays & restrict &S)
{
long long * restrict RF_L0 = (long long * restrict)&S.ucRefFrameNum_LIST_0[0]; // 1 такт
long long * restrict RFI_L1 = (long long * restrict)&S.ucRefFrameNum_LIST_1[0]; // на все 4
long long * restrict RFI_L0 = (long long * restrict)&S.ucRefFrameIndex_LIST_0[0]; // указателя
long long * restrict RFI_L1 = (long long * restrict)&S.ucRefFrameIndex_LIST_1[0]; // скорее всего
RF_L0[0] = MAGIC_VALUE; RF_L0[1] = MAGIC_VALUE; // 1 такт если будет выравнивание
RF_L1[0] = MAGIC_VALUE; RF_L1[1] = MAGIC_VALUE; // 1 такт если будет выравнивание
RFI_L0[0] = MAGIC_VALUE; RFI_L0[1] = MAGIC_VALUE; // 1 такт если будет выравнивание
RFI_L1[0] = MAGIC_VALUE; RFI_L1[1] = MAGIC_VALUE; // 1 такт если будет выравнивание
}
Итого: ориентировочно 5 тактов на всё.