-
- Регистр нужен ОДИН. Потому, как и в массиве структур, и в структуре
массивов с константной длиной массива расстояние между членами
одной структуры -- константа времени компиляции. Только в одном
случае она влазит в байт, во втором в два-четыре. Если компилятор
не понимает -- можно аксессоры на C++ написать, где constexpr
вылезет в явном виде. Можно руками закодить в C. И да, на спектруме
тоже нужен один регистр. Разные поля адресуются через LD A,H : ADD
A,#nn : LD H,A. Если fk0(329 знак., 01.06.2020 14:04)
- Индексный всмысле? Если захардкодить смещения между массивами?
Стоп-стоп, давай без напёрстничества. А то уже началось "руками
закодить". Ты без хардкода смещений чистый цэ код скомпиляй и
покажи, какой оне у компилера на выходе будет "один". Тыж понимаешь
что компилер о взаимных массивах ничего знать не будет, это знание
только у тебя в голове. А когда struct{} - тогда знает. Насчет
два-четыре байта смещения по индексу, говоришь? А поля инструкций
не резиновые, большие RxTx(822 знак., 01.06.2020 14:55)
- Да, захардкодить смещение между массивами. С чистым C язык не
позволяет, нужно полагаться на сообразительность компилятора (по
ссылке в районе 104 строки видно, что она есть -- разные члены
структуры-массива адресуются путём прибавления большого смещения).
В C++ всё можно сделать, в смысл объяснить детали компилятору и
заставить его делать именно так. fk0(847 знак., 01.06.2020 23:18, ссылка)
- Я так и знал что ты пропадал так и эдак задрачивая godbolt и компиляторы. =) Тут у нас обсуждаемый момент сдвинулся в новые области. Я не говорил и не считаю что подобное streamed хранение данных якобы всегда проблемно. Совсем нет, и в копьютерной графике например (GPU), хранение текстур/буферов в виде rrrrr bbbbb gggg wwww довольно часто встречается (или floating point застримленных по частям) или даже выкушенных и сохраненных рядом битов из байт (т.е. RxTx(1155 знак., 01.06.2020 23:54)
- Да, захардкодить смещение между массивами. С чистым C язык не
позволяет, нужно полагаться на сообразительность компилятора (по
ссылке в районе 104 строки видно, что она есть -- разные члены
структуры-массива адресуются путём прибавления большого смещения).
В C++ всё можно сделать, в смысл объяснить детали компилятору и
заставить его делать именно так. fk0(847 знак., 01.06.2020 23:18, ссылка)
- Индексный всмысле? Если захардкодить смещения между массивами?
Стоп-стоп, давай без напёрстничества. А то уже началось "руками
закодить". Ты без хардкода смещений чистый цэ код скомпиляй и
покажи, какой оне у компилера на выходе будет "один". Тыж понимаешь
что компилер о взаимных массивах ничего знать не будет, это знание
только у тебя в голове. А когда struct{} - тогда знает. Насчет
два-четыре байта смещения по индексу, говоришь? А поля инструкций
не резиновые, большие RxTx(822 знак., 01.06.2020 14:55)
- Регистр нужен ОДИН. Потому, как и в массиве структур, и в структуре
массивов с константной длиной массива расстояние между членами
одной структуры -- константа времени компиляции. Только в одном
случае она влазит в байт, во втором в два-четыре. Если компилятор
не понимает -- можно аксессоры на C++ написать, где constexpr
вылезет в явном виде. Можно руками закодить в C. И да, на спектруме
тоже нужен один регистр. Разные поля адресуются через LD A,H : ADD
A,#nn : LD H,A. Если fk0(329 знак., 01.06.2020 14:04)