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

138
29 апреля 2022, 14:20

Позвольте пожалуйста еще один вопрос по скорости работы функции, в данном случае это 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 - такой заторможенности не проявляется.

READ ALSO
Изменить this в методе класса с++

Изменить this в методе класса с++

Ситуация такова, внутри метода класса List удаляю объект, с которым работаю, а после этого хочу запустить конструктор копирования для этого...

150
Передача данных во view

Передача данных во view

Есть модель Articles, там есть 2 метода, первый getArticles, второй getComments

256
ошибка с url register post type

ошибка с url register post type

Здраствуйте,у меня в wordpress есть созданный register_post_type там создан архив car (он верный проверял с помощью функции) в нем есть к примеру машинна...

154
Как проверить пароль в Delphi если он создан в PHP функцией password_hash()

Как проверить пароль в Delphi если он создан в PHP функцией password_hash()

У меня есть самописный сайт на PHPБаза данных MySQL

217