powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Явное приведение char* к int*. Вопросы.
3 сообщений из 28, страница 2 из 2
Явное приведение char* к int*. Вопросы.
    #38611471
luislom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryВ таком случае, какая из функций отработает быстрее и почему ?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
int cmpint(int a,int b)
{
     return (a>b)?a:b;
}
char cmpchar(char a,char b)
{
     return (a>b)?a:b;
}



подозреваю что 1 байт сравнивается быстрее, и сравнение происходит побитово, а может быть происходит отрицание побитовой суммы по модулю два. Так ли это ?

Смотрите, это скомпиленные Ваши функции:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
0000000000400474 <cmpint>:
  400474:       55                      push   %rbp
  400475:       48 89 e5                mov    %rsp,%rbp
  400478:       89 7d fc                mov    %edi,-0x4(%rbp)
  40047b:       89 75 f8                mov    %esi,-0x8(%rbp)
  40047e:       8b 45 fc                mov    -0x4(%rbp),%eax
  400481:       39 45 f8                cmp    %eax,-0x8(%rbp)
  400484:       0f 4d 45 f8             cmovge -0x8(%rbp),%eax
  400488:       c9                      leaveq 
  400489:       c3                      retq   



Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
0000000000400474 <cmpchar>:
  400474:       55                      push   %rbp
  400475:       48 89 e5                mov    %rsp,%rbp
  400478:       89 fa                   mov    %edi,%edx
  40047a:       89 f0                   mov    %esi,%eax
  40047c:       88 55 fc                mov    %dl,-0x4(%rbp)
  40047f:       88 45 f8                mov    %al,-0x8(%rbp)
  400482:       0f b6 45 fc             movzbl -0x4(%rbp),%eax
  400486:       0f b6 55 f8             movzbl -0x8(%rbp),%edx
  40048a:       38 45 f8                cmp    %al,-0x8(%rbp)
  40048d:       0f 4d c2                cmovge %edx,%eax
  400490:       c9                      leaveq 
  400491:       c3                      retq   



А теперь покажите на этом коде, почему 1B будут сравниваться быстрее.
...
Рейтинг: 0 / 0
Явное приведение char* к int*. Вопросы.
    #38611494
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я не силён в ассемблере. Но судя по этому коду, 1 Байт не будет сравниваться быстрее. Больше команд mov.

Меня выгоняют спать :(
...
Рейтинг: 0 / 0
Явное приведение char* к int*. Вопросы.
    #38611506
luislom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercury Но судя по этому коду, 1 Байт не будет сравниваться быстрее. Больше команд mov.



Вот.
...
Рейтинг: 0 / 0
3 сообщений из 28, страница 2 из 2
Форумы / C++ [игнор отключен] [закрыт для гостей] / Явное приведение char* к int*. Вопросы.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]