Перейти к содержанию
    

отследить изменение переменной.

Например, такая вот глупая функция:

Не надо сравнивать несравнимые вещи. Посему прошу говорить об одном и том-же, а не подсовывать вместо теплого мягкое. Напишите и сравните результаты ИСХОДНОГО выражения:

if(*((uint32_t*)&new_packet[4]) != *((uint32_t*)&old_packet[4]))

и Вашего варианита с memcpy()

 

 

memcmp - то гарантированно работает с невыравненными данными.

Работа с элементом стуктуры так-же 100% работает с невыравненными данными. Ну и?

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

gcc 4.8.2 не знает как инлайнить memcmp ( http://gcc.godbolt.org/ ), увы :(

 

Если поииследовать memcpy (хотя она тут как телеге пятое колесо), то

memcpy для выровненных данных заинлайнил:

#include <memory.h>

void do_memcmp(void* p1, const void* p2)
{
  memcpy(__builtin_assume_aligned(p1,4),__builtin_assume_aligned(p2,4),4);
}

сделал

do_memcmp(void const*, void const*):
        ldr     r3, [r1]
        str     r3, [r0]
        bx      lr

невыровненный тоже сделал:

#include <memory.h>

void do_memcmp(void* p1, const void* p2)
{
  memcpy(p1,p2,4);
}

do_memcmp(void*, void const*):
        ldr     r3, [r1]  @ unaligned
        str     r3, [r0]  @ unaligned
        bx      lr

Остался только вопрос - под какой это камень :)

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...