Как это оптимизировать? Указатель на массив - PullRequest
0 голосов
/ 04 марта 2011

Как я могу оптимизировать этот код? pAmmoOffset - указатель на байтовый массив

*pAmmoOffset        = 0x89;
*(pAmmoOffset + 1)  = 0x70;
*(pAmmoOffset + 2)  = 0x04;

Ответы [ 4 ]

3 голосов
/ 04 марта 2011

Вы измерили этот код с помощью профилировщика и определили, что это узкое место? Если так, извините, но вы ничего не можете сделать, так как компилятор уже сделал это настолько эффективным, насколько это возможно.

1 голос
/ 04 марта 2011

Я не вижу причин для оптимизации вашего кода.Но если вы должны , вы можете попробовать назначить блоки значений следующим образом:*(int*) pAmmoOffset = 0x08040201;

, что эквивалентно:*pAmmoOffset = 0x01;
*(pAmmoOffset + 1) = 0x02;
*(pAmmoOffset + 2) = 0x04;
*(pAmmoOffset + 3) = 0x08;

Вы также можете назначать большие блоки, используя int64, если вам нужно.

1 голос
/ 04 марта 2011

Вы можете попытаться передать 4 байта за раз на 32-битной платформе. Однако , я не удивлюсь, если попытка сделать это вручную в конечном итоге будет медленнее, чем то, что компилятор сгенерировал изначально.

То, что вы делаете, настолько просто, насколько это возможно. Сомнительно, что что-то можно сделать для дальнейшей оптимизации, если только предоставленный вами код не совсем подходит, и вы не записываете константы времени компиляции в эти адреса.

0 голосов
/ 04 марта 2011
*pAmmoOffset++ = 0x89;
*pAmmoOffset++ = 0x70;
*pAmmoOffst    = 0x04;

Конечно, это изменяет указатель.

Кроме того, если указатель является глобальной переменной, сгенерированный код будет перечитывать ее после каждой записи. Чтобы обойти это, скопируйте его в локальную переменную и используйте в операторах записи.

...