58
задан 21 September 2011 в 12:50

1 ответ

memset мог быть встроен компилятором как ряд эффективных кодов операций, развернутых для нескольких циклов. Для блоков очень памяти большой емкости, как кадровый буфер на 4000x2000 64 бита, можно попытаться оптимизировать его через несколько потоков (который Вы готовите к той единственной задаче), каждый устанавливающий ее собственную часть. Обратите внимание, что существует также bzero (), но это более неясно, и менее вероятно быть столь же оптимизированным как memset, и компилятор, конечно, заметит, что Вы передаете 0.

то, Что обычно принимает компилятор, то, что Вы memset большие блоки, таким образом, для меньших блоков, вероятно, было бы более эффективно просто сделать *(uint64_t*)p = 0, если Вы init большое количество маленьких объектов.

Обычно все x86 центральные процессоры отличаются (если Вы не компилируете для некоторой стандартизированной платформы), и что-то, что Вы оптимизируете для Pentium 2, будет вести себя по-другому на Базовом Duo или i486. Таким образом, если Вы действительно в него и хотите сжать последние несколько битов зубной пасты, имеет смысл поставлять несколько версий Ваш exe, скомпилированный и оптимизированный для различных популярных моделей CPU. От Лязга личного опыта-march=native повысил кадр/с моей игры от 60 до 65, по сравнению с нет - идут.

0
ответ дан 1 November 2019 в 14:24

Другие вопросы по тегам:

Похожие вопросы: