Хотя я и ожидал, что достойный оптимизатор сделает это за вас, я бы поместил карту -> карту в локальную систему, чтобы у нее была половина шансов попасть в регистр, а не разыменовывать ее при каждом доступе. Опять же, я ожидаю, что оптимизатор сделает это за вас, поэтому вы также можете проверить вывод сборки.
Я посмотрел выход Visual Studio 2008 в выпуске, и он неплохо справился с кодом. Например, код сравнения выглядит так:
; 30 : if (cmpValue > 0)
test eax, eax
jle SHORT $LN11@GetRecFrom
; 31 : {
; omitted inner block for > case.
$LN11@GetRecFrom:
; 37 : if (cmpValue < 0)
jge SHORT $LN2@GetRecFrom
В основном это ветвление без повторного тестирования cmpValue. Приятное прикосновение.
Есть небольшая выгода от размещения карты -> локальная карта, но она крошечная. Если MAX_KEY_LEN не является хорошим кратным 4, и структуры не дополняются, вы должны обязательно поставить int первым в своей структуре.