Memcpy - немного непонятно работает

Позвольте пожалуйста еще один вопрос по скорости работы функции, в данном случае это memcpy.

Я просто пытаюсь понять, как она работает и ее скорость и вот есть небольшая для меня непонятка:

У менять есть обычный константый массив wchar_t и мне нужно из него просто побайтно перекопировать в указатель на char:

Вот код в VS2017, в release, x32:

#include "pch.h"
#include <iostream>
#include <ctime>

using namespace std;


int main()
{

    wchar_t my_wchar[] = { 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, '\0' }; // 39 элементов

    cout << "size:" << sizeof(my_wchar) / sizeof(wchar_t) << endl;

    unsigned char* my_char_pointer;
    my_char_pointer = new unsigned char[sizeof(my_wchar)];

    //И вызываю memcpy:

    int clock1 = clock();
    for (unsigned int y = 0; y < 999999999 * 4; y++)
    {
        memcpy(my_char_pointer, my_wchar, sizeof(my_wchar));
    }

    int clock2 = clock();
    cout << "time:" << clock2 - clock1 << endl;

    //------------------------------------------------------------------------------------------------------------

    wchar_t my_wchar1[] = { 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, '\0' }; // 38 элементов

    cout << "size:" << sizeof(my_wchar1) / sizeof(wchar_t) << endl;

    unsigned char* my_char_pointer1;
    my_char_pointer1 = new unsigned char[sizeof(my_wchar1)];

    //И вызываю memcpy:

    clock1 = clock();
    for (unsigned int y = 0; y < 999999999 * 4; y++)
    {
        memcpy(my_char_pointer1, my_wchar1, sizeof(my_wchar1));
    }

    clock2 = clock();
    cout << "time1:" << clock2 - clock1 << endl;
}

И вот в чем проблема, на кол-ве элементов my_wchar1 38 или 40 - код выполняется 6 секунд, НО, как только кол-во элементов у my_wchar1 сделать 39 - выполнение кода люто проваливается по скорости и время выполнения составляет 32 секунды! Почти в 5 раз дольше.

Это как понимать ?Подскажите пожалуйста из за чего это ? Я могу ооочень отдаленно предположить, что это возможно как то связано с WORD'ами, DOUBLE WORD'ами и прочими словами процессора, но не так же сильно это должно зависеть ?

PS:Только что выяснилось, что при запуск кода на x64 - такой заторможенности не проявляется.


Ответы (0 шт):