В C есть способ установить статический U32, который может быть инициализирован в начале выполнения; но это похоже на остальную часть кода как const?Используйте const, чтобы создать переменную write once?
Моя попытка:
static const U32 writeOnce = 0;
void init(U32 initVal) {
*(U32*)writeOnce = initVal;
}
Синтаксис принимается; но во время выполнения в противном случае использование readonly writeOnce
было встроено непосредственно в коды операций и оптимизирована переменная.
Я думал, может быть, extern const мог бы работать; но не может обернуть мой мозг вокруг.
Основная необходимость сделать чтение ссылок на переменную максимально возможной для оптимизации; как только значение будет установлено во время выполнения.
Т.е. Если значение используется несколько раз с функцией, каким-то образом сказать компилятору, что ему нужно только один раз прочитать значение из памяти.
Hm. Теперь я объяснил это; Я думаю, что мне будет не повезло (энергонезависимого не существует :), но я все равно задаю вопрос и посмотрю, что произойдет.
Cheers, Buk.
Там нет вообще портативного механизма, нет, но вы можете сортировать-намек на него вручную кэширование переменных, разумное использование статического/инлайн позволяет компилятору увидеть, что достижимо через где и 'restrict' к опровергнуть наложение указателя. Однажды в голубой луне я пошел так далеко, как использовать #pragmas (например, «__assume» MSVC), чтобы дать еще более тяжелые намеки на то, что оптимизатор действует. – doynax
__restrict применяется только к указательным vars. Поскольку значение 32-бит, а указатели - 64-битные в этих системах; любая экономия, которая может возникнуть из-за неправильного ввода значения в качестве указателя, будет сведена на нет необходимостью получить в два раза больше, а затем усечь его. – user3404756
И я не вижу никакого способа использовать __assume() для этого? Как вы думаете, предположите (этот var не изменится)? (И как раздражает, вы не можете использовать парамы в комментариях!) – user3404756