ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Понедельник
22 июля
1000457 Топик полностью
fk0, легенда (30.04.2020 18:47, просмотров: 296) ответил VLLV на Убедил. Навскидку потери памяти с таким выравниванием не сильно большие, должно жить.
В спортивном программировании вместо массивов структур лучше "транспонировать" их в разнотипные массивы данных: во-первых места займёт меньше, во-вторых адресация данных в коде станет более эффективной. Пример: 
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-го уровня вложенности генерит страницу кода.


Минус -- нельзя использовать указатели. Но по прежднему можно индексы.

[ZX]