Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.58/19: Рейтинг темы: голосов - 19, средняя оценка - 4.58
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915

Скорость сравнения двух массивов char

12.11.2020, 18:48. Показов 4513. Ответов 64
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте,

Вдруг возник такой простой вопрос: нужно просто сравнить два массива чаров.

Собстно это можно сделать минимум тремя способами:
-простым сравнением и перебором
-через strncmp (сравниваем массивы с указанием длинны)
-через strcmp(сравнивает массивы с \0)

И у меня вопрос по скорости выполнения эти трех методов, я че то кое чего не понимаю, вот простейший код для тестирования:


C++
1
2
3
4
char my_char1[] = {1,5,45,255,56,45,1,5,45,255,56,45, 1,5,45,255,56,45, 1,5,45,255,56,45, 1,5,45,255,56,45, 1,5,45,255,56,45, 1,5,45,255,56,45, 1,5,45,255,56,45, 1,5,45,255,56,45, 1,5,45,255,56,45, 1,5,45,255,56,45, 1,5,45,255,56,45,'\0'};
 
 
char my_char2[] = { 1,5,45,255,56,45,1,5,45,255,56,45, 1,5,45,255,56,45, 1,5,45,255,56,45, 1,5,45,255,56,45, 1,5,45,255,56,45, 1,5,45,255,56,45, 1,5,45,255,56,45, 1,5,45,255,56,45, 1,5,45,255,56,45, 1,5,45,255,56,45, 1,5,45,255,56,45,'\0'};
Сравниваю сначала равные, потом не равные массивы:


1)Через перебор:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <ctime>
 
 
int stat = 0;
 
int clock1 = clock();
 
for (int y = 0; y < 100000000; y++)
{
 
    stat = 0;
    for (int i = 0; i < sizeof(my_char2); i++)
    {
        if (my_char1[i] != my_char2[i])
        {
            stat = 1;
            break;
        }
    }
}
 
int clock2 = clock();
 
cout << stat << endl;
cout << clock2-clock1<< endl;


2)Через strncmp:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int stat = 0;
 
 
int clock1 = clock();
for (int y = 0; y < 100000000; y++)
{
    stat = 0;
    if (strncmp(my_char1, my_char2, sizeof(my_char2)) != 0)
    {
        stat = 1;
    }
 
}
int clock2 = clock();
 
cout << stat << endl;
cout << clock2-clock1<< endl;


3)Через strcmp:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int stat = 0;
 
 
int clock1 = clock();
for (int y = 0; y < 100000000; y++)
{
    stat = 0;
    if (strcmp(my_char1, my_char2) != 0)
    {
        stat = 1;
    }
}
int clock2 = clock();
 
cout << stat << endl;
cout << clock2-clock1<< endl;

И вот результаты по скорости (в release) по сравнению равных массивов:

1)3500 (мс)
2)1580 (мс)
3)0 (мс)

У меня собственно два вопроса:
-Почему между перебором и strncmp - такая разница в целых два раза ?
-И почему у strcmp - такая скорость ???

А вот результаты по скорости по сравнению не равных массивов, не равны они сразу в 1 элементе:
1)60 (мс)
2)232 (мс)
3)0 (мс)

Ну strcmp остается, а вот перебор в этом случае теперь 4 раза быстрее strncmp.

Почему так или что я делаю не так ?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.11.2020, 18:48
Ответы с готовыми решениями:

Функция для сравнения двух массивов
Функция нужна для ответа на вопрос задачи &quot;Верно ли, что все элементы 1-ой последовательности входят во 2-ю последовательность.&quot;...

Организация цикла сравнения значений элементов двух массивов
Надо, чтобы программа сравнивала РАЗНЫЕ элементы ОДНОГО МАССИВА. Например, со и т.п. Организовал вот так: for (int m = 0; m &lt;...

Сравнение двух символьных массивов - char C++
Доброго времени суток! Столкнулся с проблемой кода программы. Мне нужно сравнить текст из файла (primer.txt), и сравнить его с текстом,...

64
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
16.11.2020, 23:17  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
В смысле, с чего ты это решил? Что-то я не заметил, чтоб ты показал какой-то удобно-используемый код, при этом ещё и рабочий
C++
1
2
auto *p = (char *)&my_int;
std::lexicographical_compare(my_char, mychar + sizeof(mychar), p, p + sizeof(my_int));
Добавлено через 3 минуты
Подозреваю, что ты просто плохо понимаешь, что хочешь сделать. То, что показано выше, это обычно нафиг никому не нужно
Да не, я в данном случае ничего конкретного не хотел, я в данном случае хотел понять, как работают эти функции и им подобные, и как вообще можно ими можно пользоваться.
Просто, я до этого задачки типа поиск последовательностей в массиве, возвращения номера найденной последовательности в массиве, подсчет найденных последовательностей в массиве дела и тому подобные задачи делал свои небольшие функции, в основном через перебор. Но, как оказалось, это может быть разминкой для ума, но по скорости они менее эффективны, чем уже существующие. Вот я просто и решил посмотреть, какие функции уже есть реализованные, чтобы глупостью не занимается и не делать то, что уже есть и работает намного лучше.
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
16.11.2020, 23:28
Цитата Сообщение от Optimus11 Посмотреть сообщение
и тому подобные задачи делал свои небольшие функции, в основном через перебор. Но, как оказалось, это может быть разминкой для ума, но
Может, но не стало. Если бы ты сделал эти функции сам, то ты был бы знаком с проблематикой, соответственно, у тебя не возникли бы эти вопросы.
0
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
16.11.2020, 23:34  [ТС]
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Может, но не стало. Если бы ты сделал эти функции сам, то ты был бы знаком с проблематикой, соответственно, у тебя не возникли бы эти вопросы.
Немного не понял, какие именно эти вопросы, и что за проблематика ?
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
16.11.2020, 23:37
Цитата Сообщение от Optimus11 Посмотреть сообщение
Немного не понял, какие именно эти вопросы, и что за проблематика ?
Сравнение двух массивов разной длины

Добавлено через 54 секунды
Понимание, чем отличаются си-строки от массивов
0
38 / 13 / 3
Регистрация: 30.09.2020
Сообщений: 65
16.11.2020, 23:39
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
си-строки
О каких именно идёт речь? array of wchar_t или char ?
0
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
16.11.2020, 23:41  [ТС]
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Сравнение двух массивов разной длины

Добавлено через 54 секунды
Понимание, чем отличаются си-строки от массивов
А какие у меня вопросы возникли насчет сравнения массивов разной длинны и насчет отличия просто массива и Си-строки ?

Я же про это вообще не спрашивал
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
16.11.2020, 23:43
Цитата Сообщение от Ligren Посмотреть сообщение
О каких именно идёт речь? array of wchar_t или char ?
Об любых, которые заканчиваются нулём
0
38 / 13 / 3
Регистрация: 30.09.2020
Сообщений: 65
16.11.2020, 23:48
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
которые заканчиваются нулём
Наверное было бы очень запарно указывать для каждой функции вывода, максимальную длину строки) Хорошо что сейчас в c++ строки контейнера string хранят информацию о длине строки, её кодировке, и прочее)))
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
16.11.2020, 23:53
Цитата Сообщение от Ligren Посмотреть сообщение
Наверное было бы очень запарно указывать для каждой функции вывода, максимальную длину строки) Хорошо что сейчас в c++ строки контейнера string хранят информацию о длине строки, её кодировке, и прочее)))
"строки контейнера string" это довольно дорогая штука. Соответственно, обычные си-строки никто не отменял.
Ну и, кроме длины строки они ничего больше не хранят, никаких "её кодировке, и прочее)))"
Ещё capacity
1
38 / 13 / 3
Регистрация: 30.09.2020
Сообщений: 65
17.11.2020, 00:22
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
это довольно дорогая штука
Чем же ? Много памяти не скушает, а buffer пред выделенный даст больший прирост. Тем более, там вроде как есть метод который позволяет задать размер buffer по умолчанию.


Цитата Сообщение от oleg-m1973 Посмотреть сообщение
"её кодировке, и прочее)))"
Странно, мне казалось что есть. Хотя в Delphi точно есть в строках "string" это 100%
0
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
17.11.2020, 00:25  [ТС]
Цитата Сообщение от Ligren Посмотреть сообщение
а buffer пред выделенный даст больший прирост.
Даст больший прирост чему ?
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
17.11.2020, 00:26
Optimus11, посмотрите в дебаге (иначе соптимизирует и не станет сравнивать, а мне незахотелось перемешивать и делать копии на каждой итерации)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include <iostream>
#include <cstring>
#include <chrono>
 
using std::cout;
using  std::cin;
using  std::endl;
 
using UChar=unsigned char;
 
template<class IntegerType>
bool compareUCharArrays(const UChar *ch_lhs, const UChar *ch_rhs, size_t len)
{
    size_t sint=sizeof(IntegerType), n=len/sint, nmax=n*sint;
    const UChar *after_fin1=ch_lhs+n*sint,  *after_fin2=ch_lhs+len;
    for(; ch_lhs<after_fin1; )
    {
        if( *reinterpret_cast<const IntegerType*>(ch_lhs)!=*reinterpret_cast<const IntegerType*>(ch_rhs) )
           return false;
           ch_lhs+=sint; ch_rhs+=sint ;
    }
    for( ; ch_lhs<after_fin2;  )
    {
        if( *ch_lhs != *ch_rhs)
           return false;
           ++ch_lhs; ++ch_rhs;
    }
     return true;
}
 
int main() {
UChar my_char1[] = { 1,5,45,255,56,45,1,5,45,255,56,45, 1,5,45,255,56,45, 1,5,45,255,56,45, 1,5,45,255,56,45, 1,5,45,255,56,45, 1,5,45,255,56,45, 1,5,45,255,56,45, 1,5,45,255,56,45, 1,5,45,255,56,45, 1,5,45,255,56,45, 1,5,45,255,56,45,'\0'};
UChar my_char2[] = { 1,5,45,255,56,45,1,5,45,255,56,45, 1,5,45,255,56,45, 1,5,45,255,56,45, 1,5,45,255,56,45, 1,5,45,255,56,45, 1,5,45,255,56,45, 1,5,45,255,56,45, 1,5,45,255,56,45, 1,5,45,255,56,45, 1,5,45,255,56,45, 1,5,45,255,56,45,'\0'};
size_t len=sizeof(my_char1);
cout << compareUCharArrays<long long>(my_char1, my_char2,len)<<endl;
 
////////////test
size_t const N_test=10000000;
size_t cnt(0);
 
std::chrono::time_point<std::chrono::system_clock> start, end;
start = std::chrono::system_clock::now();
for(size_t i=0; i<N_test ; ++i)
{
    cnt+=compareUCharArrays<long long>(my_char1, my_char2,len);
}
end = std::chrono::system_clock::now();
int elapsed_seconds = std::chrono::duration_cast<std::chrono::milliseconds>
(end-start).count();
cout << "working time: " << elapsed_seconds << " ms\n";
cout<<cnt<<endl;
 
start = std::chrono::system_clock::now();
for(size_t i=0; i<N_test ; ++i)
{
    cnt+=strncmp((char*)my_char1, (char*)my_char2,len);
}
end = std::chrono::system_clock::now();
elapsed_seconds = std::chrono::duration_cast<std::chrono::milliseconds>
(end-start).count();
cout << "working time: " << elapsed_seconds << " ms\n";
cout<<cnt<<endl;
return 0;
}
Я затрудняюсь объяснить почему библиотечная функция чуть медленнее, но времена очень близки и это наталкивает на мысль, что типовая реализация сравнивает строки как массивы целых чисел, если это выгодно.
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
17.11.2020, 00:32
Цитата Сообщение от Ligren Посмотреть сообщение
Чем же ? Много памяти не скушает, а buffer пред выделенный даст больший прирост. Тем более, там вроде как есть метод который позволяет задать размер buffer по умолчанию.
Ты о чём вообще? Динамическое выделение памяти, это сама по себе очень дорогая операция.

Цитата Сообщение от Ligren Посмотреть сообщение
Странно, мне казалось что есть. Хотя в Delphi точно есть в строках "string" это 100%
В дельфи тоже нет

Добавлено через 4 минуты
Цитата Сообщение от IGPIGP Посмотреть сообщение
Optimus11, посмотрите в дебаге (иначе соптимизирует и не станет сравнивать, а мне незахотелось перемешивать и делать копии на каждой итерации)
В дебаге вообще нельзя ничего сравнивать. Лучше сделать код, который не соптимизируется.
Цитата Сообщение от IGPIGP Посмотреть сообщение
Я затрудняюсь объяснить почему библиотечная функция чуть медленнее, но времена очень близки и это наталкивает на мысль, что типовая реализация сравнивает строки как массивы целых чисел, если это выгодно.
Подозреваю именно из-за дебага. Там strcpy другая.
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
17.11.2020, 00:33
Цитата Сообщение от Ligren Посмотреть сообщение
Чем же ? Много памяти не скушает, а buffer пред выделенный даст больший прирост.
Тем, что выделение памяти из кучи значительно дороже выделения памяти из стека.
0
38 / 13 / 3
Регистрация: 30.09.2020
Сообщений: 65
17.11.2020, 00:38
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Ты о чём вообще? Динамическое выделение памяти, это сама по себе очень дорогая операция
А ты привык работать со строками, которые никогда не изменяются ? А если нужно найти в строке строку, то для неё будет выделена новая память. Банально мы вызывали strstr и поняли, что N длина была найдена. И теперь нам её нужно передать куда - то ещё.

Цитата Сообщение от oleg-m1973 Посмотреть сообщение
В дельфи тоже нет
А вот и да.
Кликните здесь для просмотра всего текста
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
function StringCodePage(const S: UnicodeString): Word; overload;
begin
  if S <> '' then
    Result := PWord(PByte(S) - 12)^                          // StrRec.codePage
  else
    Result := Word(DefaultUnicodeCodePage);
end;
 
function StringCodePage(const S: _RawByteStr): Word; overload;
begin
  if S <> '' then
    Result := PWord(PByte(S) - 12)^                          // StrRec.codePage
  else
{$IFDEF NEXTGEN}
    Result := Word(CP_UTF8);
{$ELSE  NEXTGEN}
    Result := Word(DefaultSystemCodePage);
{$ENDIF NEXTGEN}
end;
 
function StringCodePage(const S: _WideStr): Word; overload;
begin
  if S <> '' then
    Result := PWord(PByte(S) - 12)^                          // StrRec.codePage
  else
    Result := Word(DefaultUnicodeCodePage);
end;


Добавлено через 40 секунд
Цитата Сообщение от Renji Посмотреть сообщение
Тем, что выделение памяти из кучи значительно дороже выделения памяти из стека.
На реальной программе, вы никогда не будете использовать строки - строго определённой длины.
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
17.11.2020, 00:43
Цитата Сообщение от Ligren Посмотреть сообщение
А ты привык работать со строками, которые никогда не изменяются ? А если нужно найти в строке строку, то для неё будет выделена новая память. Банально мы вызывали strstr и поняли, что N длина была найдена. И теперь нам её нужно передать куда - то ещё.
Цитата Сообщение от Ligren Посмотреть сообщение
На реальной программе, вы никогда не будете использовать строки - строго определённой длины.
Да ладно. Это что за "реальные программы" такие? На дельфи что-ли?
В с++ сплошь и рядом используются строки строго определённой длины. Взять хотя бы std::string_view
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
17.11.2020, 00:43
Цитата Сообщение от Ligren Посмотреть сообщение
На реальной программе, вы никогда не будете использовать строки - строго определённой длины.
Системный API с си-строками онли. В случае пути к файлу, у этой строки будет и ограничение на размер.
0
38 / 13 / 3
Регистрация: 30.09.2020
Сообщений: 65
17.11.2020, 01:09
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
На дельфи что-ли?
Какая разница на чём? Разницы нету, если мы будем использовать аналогичные вещи вроде array [0..N] of char

Цитата Сообщение от Renji Посмотреть сообщение
Системный API с си-строками онли. В случае пути к файлу, у этой строки будет и ограничение на размер.
Моя первая проблема, с которой я столкнулся
https://habr.com/ru/post/307186/

Но, в принципе правильно, что API рассчитан что вызывающий процесс будет распоряжаться с выделением буфера.

Добавлено через 1 минуту
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Это что за "реальные программы" такие?
Которые сложнее A + B. К примеру поиск подстроки в строке. Как будто никогда не писали такие программы.

Добавлено через 7 минут
Цитата Сообщение от Ligren Посмотреть сообщение
К примеру поиск подстроки в строке.
Ну или нам нужно сложить две строки, для получения результативной строки. Для такой операции уже не будет известна длина, так как строка может отличаться, или даже операция может уже быть Строка1 + Строка2 + Строка 3. То решается это как то так

Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
ZEND_API zend_string *zend_string_concat3(
        const char *str1, size_t str1_len,
        const char *str2, size_t str2_len,
        const char *str3, size_t str3_len)
{
    size_t len = str1_len + str2_len + str3_len;
    zend_string *res = zend_string_alloc(len, 0);
 
    memcpy(ZSTR_VAL(res), str1, str1_len);
    memcpy(ZSTR_VAL(res) + str1_len, str2, str2_len);
    memcpy(ZSTR_VAL(res) + str1_len + str2_len, str3, str3_len);
    ZSTR_VAL(res)[len] = '\0';
 
    return res;
}



Взял код который активно используется в крупной библиотеке.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
17.11.2020, 01:28
Optimus11,
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
дебаге вообще нельзя ничего сравнивать. Лучше сделать код, который не соптимизируется.
Сделал. Вывод был верным. Дебаг не оптимизирует и релиз который предотвращает оптимизизацию дают сходные результаты. Релиз конечно быстрее, но увеличив счётчик циклов выходим на сравнимые времена.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#include <iostream>
#include <cstring>
#include <chrono>
#include <vector>
#include <algorithm>
 
using std::cout;
using  std::cin;
using  std::endl;
 
using UChar=unsigned char;
 
template<class IntegerType>
bool compareUCharArrays(const UChar *ch_lhs, const UChar *ch_rhs, size_t len)
{
    size_t sint=sizeof(IntegerType), n=len/sint, nmax=n*sint;
    const UChar *after_fin1=ch_lhs+n*sint,  *after_fin2=ch_lhs+len;
    for(; ch_lhs<after_fin1; )
    {
        if( *reinterpret_cast<const IntegerType*>(ch_lhs)!=*reinterpret_cast<const IntegerType*>(ch_rhs) )
           return false;
           ch_lhs+=sint; ch_rhs+=sint ;
    }
    for( ; ch_lhs<after_fin2;  )
    {
        if( *ch_lhs != *ch_rhs)
           return false;
           ++ch_lhs; ++ch_rhs;
    }
     return true;
}
 
int main() {
 
std::vector<UChar> my_char = { 1,5,45,255,56,45,1,5,45,255,56,45, 1,5,45,255,56,45, 1,5,45,255,56,45, 1,5,45,255,56,45, 1,5,45,255,56,45, 1,5,45,255,56,45, 1,5,45,255,56,45, 1,5,45,255,56,45, 1,5,45,255,56,45, 1,5,45,255,56,45, 1,5,45,255,56,45,'\0'};
size_t len=my_char.size();
 
////////////test
size_t const N_test=10000000;
size_t cnt1(0), cnt2(0);
 
std::vector<UChar> my_char1(len);
std::vector<UChar> my_char2(len);
 
int elapsed_seconds_compareUCharArrays(0), elapsed_seconds_strncmp(0);
 
std::chrono::time_point<std::chrono::system_clock> start, end;
for(size_t i=0; i<N_test ; ++i)
{
std::random_shuffle(my_char.begin(), my_char.end()) ;
std::copy(my_char.begin(), my_char.end(), my_char1.begin()) ;
std::copy(my_char.begin(), my_char.end(), my_char2.begin()) ;
 
 
start = std::chrono::system_clock::now();
cnt1 += compareUCharArrays<long long>(my_char1.data(), my_char2.data(),len);
end = std::chrono::system_clock::now();
 
elapsed_seconds_compareUCharArrays+= std::chrono::duration_cast<std::chrono::milliseconds>
(end-start).count();
 
start = std::chrono::system_clock::now();
cnt2 += !strncmp((char*)my_char1.data(), (char*)my_char2.data(),len);
end = std::chrono::system_clock::now();
    elapsed_seconds_strncmp += std::chrono::duration_cast<std::chrono::milliseconds>
(end-start).count();
}
 
cout << "working time elapsed_seconds_compareUCharArrays: " << elapsed_seconds_compareUCharArrays << " ms\n";
cout << "working time elapsed_seconds_strncmp: " << elapsed_seconds_strncmp << " ms\n";
cout<<cnt1<<' '<<cnt2<<endl;
return 0;
}
1
38 / 13 / 3
Регистрация: 30.09.2020
Сообщений: 65
17.11.2020, 01:57
Цитата Сообщение от IGPIGP Посмотреть сообщение
Сделал. Вывод был верным. Дебаг не оптимизирует и релиз который предотвращает оптимизизацию дают сходные результаты. Релиз конечно быстрее, но увеличив счётчик циклов выходим на сравнимые времена.
А в настройках какие уровни оптимизации выставлены ?

Добавлено через 3 минуты
Цитата Сообщение от IGPIGP Посмотреть сообщение
" << elapsed_seconds_strncmp << "
А у меня выводит постоянно 0ms на две функции. Топ замеры!)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.11.2020, 01:57
Помогаю со студенческими работами здесь

Перемножение столбиком двух массивов char
Здравствуйте. Задание таково: используя символьный массив char, который отображает два положительных целых числа - создать третий...

Сложение двух динамических массивов char* в одну строку
В массивы вводятся данные, масcивы вида : int n,k; char *a,*b; a=new char; b=new char; Как вывести результирующую...

функция сравнения двух массивов
Привет, кто-нибудь знает функцию, которая бы сравнивала два массива и выдавала уникальный элемент в одном из массивов?

Оптимизация сравнения двух массивов
вот сейчас так у меня выглядит код // текст разлаживается на отдельные слова и помещяется в массив ( $arr='bad'; $arr='fix';...

Сравнения двух массивов по двум значениям
Помогите пожалуйста. Есть два массива. Массив: Array( =&gt; Array ( =&gt; name1 =&gt; 0 ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru