Просто посмотрел тот же самый луп старым способом или при помощи ново рекомендуемого array_view
int sum(int * arr, size_t size)
{
int result = 0;
for (int i = 0; i < size; ++i)
result += arr[i];
return result;
}
vs
int sum(gsl::array_view<int> arr)
{
int result = 0;
for (int & i : arr)
result += i;
return result;
}
push ebx
push esi
push edi
xor edi, edi
mov ebx, ecx
xor esi, esi
npad 7
$LL4@sum:
add edi, DWORD PTR [ebx+esi*4]
inc esi
add esp, 8
cmp esi, 7
jb SHORT $LL4@sum
mov eax, edi
push ebp
mov ebp, esp
push ecx
mov eax, DWORD PTR _arr$[ebp]
mov ecx, DWORD PTR _arr$[ebp+4]
push ebx
push esi
push edi
xor edi, edi
lea ebx, DWORD PTR [eax+ecx*4]
mov esi, eax
$LL37@sum_arr:
cmp esi, ebx
je SHORT $LN3@sum_arr
cmp esi, eax
jb SHORT $LN56@sum_arr
lea eax, DWORD PTR [eax+ecx*4]
cmp esi, eax
jae SHORT $LN56@sum_arr
add edi, DWORD PTR [esi]
mov ecx, DWORD PTR _arr$[ebp+4]
add esp, 8
mov eax, DWORD PTR _arr$[ebp]
add esi, 4
jmp SHORT $LL37@sum_arr
$LN56@sum_arr:
call DWORD PTR __imp__terminate
$LN81@sum_arr:
$LN3@sum_arr:
mov eax, edi
Компу нужно намного дольше работать чтоб получить тот же результат.
P.S. всяким адептам кричащим «c++ с классами это не c++» не лезьте сюда в тред