Да, захардкодить смещение между массивами. С чистым C язык не
позволяет, нужно полагаться на сообразительность компилятора (по
ссылке в районе 104 строки видно, что она есть -- разные члены
структуры-массива адресуются путём прибавления большого смещения).
В C++ всё можно сделать, в смысл объяснить детали компилятору и
заставить его делать именно так. Поля инструкций да, не резиновые, менее эффективно чем структура. Но у каждой медали есть обратная сторона: ты говоришь, мол последовательное обращение эффективнее. Но вот у меня пример с хеш-таблицей, и представь, я бы строки тоже хранил внутри -- насколько эффективен был бы поиск по таблице, когда чтоб прочитать 4 байтика нужно выгрести ещё десятки байт ненужных пока полей? Или, ещё хуже, если бы был двоичный поиск по таблице -- аналогично. Я ранее указывал -- локальность хороша, когда обращение к полям структуры чисто последовательное. А когда к одним полям обращение идёт существенно чаще, чем к другим, то нужна тоже локальность, но другого рода -- должны быть сгруппированы поля, время обращения к которым критично (в данном случае key_idx и key_len -- остальное вторично).
Ссылка на исходник:
Исходник на всякий случай:
https://godbolt.org/z/m_Liqt
#include