Скорость копирования структуры в структуру.

findeler
Offline
Зарегистрирован: 08.03.2016

Есть достаточно объёмная структура (около 600 байт) собственно говоря их две одинаковых.  Интересует вопрос как быстро осуществится операция. struct1=struct2;

Я так понял что это весьма быстрая операция и выполнится за те же 600 тактов. плюс минус. Или быстрее ?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

А просто попробовать? Напечатать значение millis, присвоить её 1000 (или 10000) раз, а потом снова напечатать значение millis религия не позволяет? :))))

ptr
Offline
Зарегистрирован: 28.05.2016

Смотря какой процессор. AVR будет героически пыхтеть по словам, по два такта загрузки в регистр с инкрементом указателя в регистре и по два такта на запись в память с инкрементом указателя в регистре. То есть, на 600 байт потребуется 1200 тактов + 4 такта на загрузку указателей, если они еще не в регистрах.

На ARM можно вообще поручить это DMA, пусть в фоне трудится. В случае DMA будет по 2 такта на 32-х битное слово. То есть 300 тактов + инициализация DMA такта четыре (в лом смотреть точно).

Само собой, подразуемевается, что выполняется не присваивание структур, а

memcpy(&struct1, &struct2, min(sizeof(struct1),sizeof(struct2));

 

findeler
Offline
Зарегистрирован: 08.03.2016

Понятно, приблизительно так и думал. С разрядностью только промахнулся.

ptr
Offline
Зарегистрирован: 28.05.2016

findeler пишет:

Понятно, приблизительно так и думал. С разрядностью только промахнулся.

Точно, AVR по байту пересылает ведь, а не по слову (