Информация об изменениях

Сообщение Re[3]: JNI DLL и MSVCR от 13.03.2020 14:20

Изменено 13.03.2020 14:22 morgot

Re[3]: JNI DLL и MSVCR
Здравствуйте, vsb, Вы писали:

vsb>А где взять хорошие реализации этих функций? Ну т.е. я, конечно, могу их в две строчки написать сам, но, подозреваю, с современными процессорами там всё гораздо сложней, нужны всякие ассемблерные вставки и тд. Есть какой-нибудь авторитетный файлик, откуда их можно выдрать? Или не заморачиваться и написать тупо циклом?


Так с того же CRT и можно взять. К примеру, вот так
#pragma intrinsic(memset)

#pragma function(memset)
void * __cdecl memset(void *pTarget, int value, size_t cbTarget) {
    unsigned char *p = pTarget;
    while (cbTarget-- > 0) {
        *p++ = value;
    }
    return pTarget;
}
Re[3]: JNI DLL и MSVCR
Здравствуйте, vsb, Вы писали:

vsb>А где взять хорошие реализации этих функций? Ну т.е. я, конечно, могу их в две строчки написать сам, но, подозреваю, с современными процессорами там всё гораздо сложней, нужны всякие ассемблерные вставки и тд. Есть какой-нибудь авторитетный файлик, откуда их можно выдрать? Или не заморачиваться и написать тупо циклом?


Так с того же CRT и можно взять. К примеру, вот так
#pragma intrinsic(memset)

#pragma function(memset)
void * __cdecl memset(void *pTarget, int value, size_t cbTarget) {
    unsigned char *p = pTarget;
    while (cbTarget-- > 0) {
        *p++ = value;
    }
    return pTarget;
}


А вообще, смысла нет заморачиваться, не думаю вам несколько тактов процессора сыграют погоду (это же только для объявления переменных, и т.п., типа ZeroMemory).
Тут важно другое — заставить студию подключать именно вашу реализацию, а не с монструозных MSVCRT120.DLL