Image

Imageex_ex_zhuzh wrote in Imageru_cpp

Category:

Миф о мифе о бескомпромиссной эффективности STL-евых векторов.

Вынесено из комментов и причесано. Обе функции скомпилированы компилятором gcc-4.1.2 для архитектуры x86 на gentoo с флагом -O2. Из ассемблерного кода выкинуты пролог и эпилог, оставлены только циклы.

#include <vector>
void z(int n, int k, std::vector<int>& a) {
    for (int i=0; i<n; i++)
        a[i%k] = i;
}
void z (int n, int k, int* a) {
    for (int i=0; i<n; i++)
        a[i%k] = i;
}
.L4:
        movl    %edi, %eax
        cltd
        idivl   %ebx
        movl    %edi, (%ecx,%edx,4)
        incl    %edi
        cmpl    %edi, %esi
        jne     .L4
.L4:
        movl    %ecx, %eax
        cltd
        idivl   %ebx
        movl    %ecx, (%esi,%edx,4)
        incl    %ecx
        cmpl    %ecx, %edi
        jne     .L4


Это, конечно же, тривиально и не стоило бы упоминания, если бы не всплывало с завидным постоянством в самых разнообразных дискусиях.