ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
20 апреля
1008755 Топик полностью
fk0, легенда (01.06.2020 23:18, просмотров: 390) ответил RxTx на Индексный всмысле? Если захардкодить смещения между массивами? Стоп-стоп, давай без напёрстничества. А то уже началось "руками закодить". Ты без хардкода смещений чистый цэ код скомпиляй и покажи, какой оне у компилера на выходе будет "один". Тыж понимаешь что компилер о взаимных массивах ничего знать не будет, это знание только у тебя в голове. А когда struct{} - тогда знает. Насчет два-четыре байта смещения по индексу, говоришь? А поля инструкций не резиновые, большие
Да, захардкодить смещение между массивами. С чистым C язык не позволяет, нужно полагаться на сообразительность компилятора (по ссылке в районе 104 строки видно, что она есть -- разные члены структуры-массива адресуются путём прибавления большого смещения). В C++ всё можно сделать, в смысл объяснить детали компилятору и заставить его делать именно так. 

Поля инструкций да, не резиновые, менее эффективно чем структура. Но у каждой медали есть обратная сторона: ты говоришь, мол последовательное обращение эффективнее. Но вот у меня пример с хеш-таблицей, и представь, я бы строки тоже хранил внутри -- насколько эффективен был бы поиск по таблице, когда чтоб прочитать 4 байтика нужно выгрести ещё десятки байт ненужных пока полей? Или, ещё хуже, если бы был двоичный поиск по таблице -- аналогично. Я ранее указывал -- локальность хороша, когда обращение к полям структуры чисто последовательное. А когда к одним полям обращение идёт существенно чаще, чем к другим, то нужна тоже локальность, но другого рода -- должны быть сгруппированы поля, время обращения к которым критично (в данном случае key_idx и key_len -- остальное вторично).


Ссылка на исходник: Исходник на всякий случай:

https://godbolt.org/z/m_Liqt



#include
[ZX]