|
отследить изменение переменной. |
|
|
|
Dec 15 2015, 10:14
|
Профессионал
    
Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075

|
есть пакет с данными uint8_t packet[20] . переменная uint32_t занимает 4 байта. соответственно если я хочу посмотреть изменилась ли переменная в следующей посылке я могу сделать так Код if (new_packet[0] != old_packet[0] || new_packet[1] != old_packet[1] || new_packet[2] != old_packet[2] || new_packet[3] != old_packet[3]) или так Код if(memcmp(new_packet, old_packet, 4) != 0) вопрос какой способ быстрее?
|
|
|
|
|
 |
Ответов
|
Dec 16 2015, 15:25
|

Местный
  
Группа: Участник
Сообщений: 329
Регистрация: 23-04-14
Пользователь №: 81 502

|
Цитата(zltigo @ Dec 16 2015, 15:08)  К чему эта улыбочка? Для начала попробуйте сделать этот самый "правильно заинлайненый". Для начала этого сделать просто не удастся - это библиотечная функция. Посему посморите просто на исходник memcmp() дабы, даже если ее заинлайтить, понять написанную Вами глупость. Я делаю так: 1. пишу memcmp 2. компилирую в release c соответствующими опциями оптимизации. 3. все Например, такая вот глупая функция: int Foo_cmp(const void* apSrc, size_t aNumBytes) { unsigned char buf[100] = "abcdef"; return memcmp(apSrc, buf, aNumBytes); } компилируется в следующий кусок ассемблерной хрени: CODE return memcmp(apSrc, buf, aNumBytes); 0134103E mov esi,0Fh 01341043 lea ecx,[ebp-68h] 01341046 mov edx,offset string "qweqweqweq" (13420FCh) 0134104B jmp Foo_cmp+50h (1341050h) 0134104D lea ecx,[ecx] 01341050 mov eax,dword ptr [edx] 01341052 cmp eax,dword ptr [ecx] 01341054 jne Foo_cmp+68h (1341068h) 01341056 sub esi,4 01341059 add ecx,4 0134105C add edx,4 0134105F cmp esi,4 01341062 jae Foo_cmp+50h (1341050h) 01341064 test esi,esi 01341066 je Foo_cmp+0B9h (13410B9h) 01341068 movzx eax,byte ptr [edx] 0134106B movzx edi,byte ptr [ecx] 0134106E sub eax,edi 01341070 jne Foo_cmp+0A3h (13410A3h) 01341072 cmp esi,1 01341075 jbe Foo_cmp+0B9h (13410B9h) 01341077 movzx eax,byte ptr [edx+1] 0134107B movzx edi,byte ptr [ecx+1] 0134107F sub eax,edi 01341081 jne Foo_cmp+0A3h (13410A3h) 01341083 cmp esi,2 01341086 jbe Foo_cmp+0B9h (13410B9h) 01341088 movzx eax,byte ptr [edx+2] 0134108C movzx edi,byte ptr [ecx+2] 01341090 sub eax,edi 01341092 jne Foo_cmp+0A3h (13410A3h) 01341094 cmp esi,3 01341097 jbe Foo_cmp+0B9h (13410B9h) 01341099 movzx eax,byte ptr [edx+3] 0134109D movzx ecx,byte ptr [ecx+3] 013410A1 sub eax,ecx 013410A3 sar eax,1Fh 013410A6 pop edi 013410A7 or eax,1 013410AA pop esi В debug версии да, стоит честный вызов memcmp
Сообщение отредактировал CrimsonPig - Dec 16 2015, 15:26
|
|
|
|
Сообщений в этой теме
Jenya7 отследить изменение переменной. Dec 15 2015, 10:14 zltigo QUOTE (Jenya7 @ Dec 15 2015, 12:14) вопро... Dec 15 2015, 10:18 Jenya7 Цитата(zltigo @ Dec 15 2015, 16:18) Один ... Dec 15 2015, 11:09  msalov Цитата(Jenya7 @ Dec 15 2015, 14:09) так ч... Dec 15 2015, 11:33 Dog Pawlowa Ну, для начала желательно знать, что за ядро.
То,... Dec 15 2015, 11:32 Jenya7 Цитата(Dog Pawlowa @ Dec 15 2015, 17:32) ... Dec 15 2015, 11:37  msalov Цитата(Jenya7 @ Dec 15 2015, 14:37) функц... Dec 15 2015, 11:41   Jenya7 Цитата(msalov @ Dec 15 2015, 17:41) Адрес... Dec 15 2015, 11:45    zltigo QUOTE (Jenya7 @ Dec 15 2015, 13:45) допус... Dec 15 2015, 12:00     Jenya7 Цитата(zltigo @ Dec 15 2015, 18:00) Нет, ... Dec 15 2015, 12:07      zltigo QUOTE (Jenya7 @ Dec 15 2015, 14:07) какая... Dec 15 2015, 12:18       Jenya7 Цитата(zltigo @ Dec 15 2015, 18:18) 1) Не... Dec 15 2015, 12:22        zltigo QUOTE (Jenya7 @ Dec 15 2015, 14:22) и все... Dec 15 2015, 12:29        msalov Цитата(Jenya7 @ Dec 15 2015, 15:22) и все... Dec 15 2015, 12:29 zltigo QUOTE (Dog Pawlowa @ Dec 15 2015, 13:32) ... Dec 15 2015, 11:54  Jenya7 Цитата(zltigo @ Dec 15 2015, 17:54) Надо,... Dec 15 2015, 11:56 XVR Цитатакакая структура. у меня функция принимает ма... Dec 15 2015, 12:15 Jenya7 а что можно прямо так ?
(my_struct *) my_arr Dec 15 2015, 13:39 zltigo QUOTE (Jenya7 @ Dec 15 2015, 15:39) а что... Dec 15 2015, 14:48  Jenya7 понял.спасибо. Dec 15 2015, 14:52 Jenya7 сделал листинг ради интереса.
Кодif (new_packe... Dec 16 2015, 08:45 zltigo QUOTE (Jenya7 @ Dec 16 2015, 10:45) можно... Dec 16 2015, 11:07     zltigo QUOTE (CrimsonPig @ Dec 16 2015, 17:25) Н... Dec 16 2015, 15:46    XVR Цитата(zltigo @ Dec 16 2015, 18:08) Для н... Dec 16 2015, 15:30     zltigo QUOTE (XVR @ Dec 16 2015, 17:30) Не всегд... Dec 16 2015, 15:38      CrimsonPig Цитата(zltigo @ Dec 16 2015, 15:38) Догов... Dec 16 2015, 15:43 XVR gcc 4.8.2 не знает как инлайнить memcmp ( http://g... Dec 17 2015, 11:53
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|