В спортивном программировании вместо массивов структур лучше
"транспонировать" их в разнотипные массивы данных: во-первых места
займёт меньше, во-вторых адресация данных в коде станет более
эффективной. Пример: struct S
{
int a;
float b;
struct V
{
char c;
long d;
};
struct V v;
};
В коде:
struct S s[1024];
s[i].a, s[i]v.d...
Транспонируем:
int s_a[1024];
float s_b[1024];
char s_v_c[1024];
long s_v_d[1024];
s_a[i], s_v_c[i]...
В последней строке используется адресация вида ldr rx, [ry + rz * Const], что превращается буквально в одну инструкцию процессора, ну две. И нет потерь на выравнивание. А в первом случае адресация элемента 7-го уровня вложенности генерит страницу кода.
Минус -- нельзя использовать указатели. Но по прежднему можно индексы.