Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
gutalin
0 / 0 / 0
Регистрация: 03.02.2012
Сообщений: 39
#1

Как избавиться от побайтового копирования? memcpy - C++

15.11.2015, 13:18. Просмотров 231. Ответов 4
Метки нет (Все метки)

Здравствуйте,
недавно использовал код , который побайтово копирует в кольцевой буфер данные
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
static quint16 const BUF_SIZE = 4096;
static quint16 const BUF_MASK = BUF_SIZE-1;
/*запись*/
for(size_t i =0; i <= size; i++)
{
        CircleBuffer[(writePointer++) & BUF_MASK] = data[i];
}
/*чтение*/
for(size_t i =0; i <= size; i++)
{
        data[i] = CircleBuffer[(readPointer++) & BUF_MASK];
}
Насколько я понимаю - побайтовое копирование в цикле - это очень медленное решение, можно ли сделать как-нибудь по-другому?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.11.2015, 13:18
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как избавиться от побайтового копирования? memcpy (C++):

Memcpy, buffer overflow. Может ли возникнуть ошибка в функции memcpy - C++
Бывает ли на практике такое, что код #define size 1000; // some value int x, y; /* ... */ memcpy(y, x, (size + 1) * sizeof(int)); ...

Шаблонная функция для побайтового сдвига - C++
Добрый день. Есть функция для побайтового сдвига для элементов из массива:template&lt;typename T, int start, int length&gt; static T...

Как работает memcpy? - C++
Небольшой вопрос по поводу memcpy. Какая из функций будет работать быстрее? typedef unsigned int WORD32; void wcpy(WORD32 * D,...

Не получается использовать std::copy как memcpy? - C++
Получил задание переписать свою код: Поля x, y указывают координаты, куда должен быть помещен файл - кадр, а width, height ширину и...

Не работает memcpy - C++
Нужно просто полностью скопировать первый массив, во второй, длина у них одинакова. Делаю так: BYTE in; // = {10, ...} типа заполнен...

2d ---> 1d array и memcpy - C++
Можно ли сконвертировать двумерный массив в одномерный с помощью memcpy? Если да, то будет ли быстрее, чем тупое перебирание в циклах?

4
Nick Alte
Эксперт С++
1642 / 1014 / 119
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
15.11.2015, 13:49 #2
Да, надо воспользоваться memcpy. Её реализуют с большим тщанием, выжимая все производительные соки.
В данном случае функцию надо вызвать два раза, рассчитав границы.
0
gutalin
0 / 0 / 0
Регистрация: 03.02.2012
Сообщений: 39
16.11.2015, 10:24  [ТС] #3
это же вроде небезопасная функция... хорошо, напишу аналог
0
Nick Alte
Эксперт С++
1642 / 1014 / 119
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
21.11.2015, 13:16 #4
Цитата Сообщение от gutalin Посмотреть сообщение
это же вроде небезопасная функция
Да уж не опаснее побайтового копирования-то. И чем написанный аналог будет лучше?

"Небезопасность" - показатель не абсолютный, его надо брать в контексте, а именно: будет ли кто-то целенаправленно атаковать данное приложение? Работает ли данный участок кода с данными, доступными атакующему? Да и обезопашивание обычно заключается в тщательной проверке входных параметров.
0
Evg
Эксперт CАвтор FAQ
18377 / 6424 / 441
Регистрация: 30.03.2009
Сообщений: 17,815
Записей в блоге: 28
21.11.2015, 13:20 #5
Цитата Сообщение от gutalin Посмотреть сообщение
это же вроде небезопасная функция
Она небезопасна только в том случае, если её неправильно использовать. Так же как и указатели или макросы. Поменьше читай всяких бредовых афторов
0
21.11.2015, 13:20
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.11.2015, 13:20
Привет! Вот еще темы с ответами:

memset, memcpy - C++
Использую MSVS 2008. Почему memcpy работает только с char? То есть, такой код работает: int main() { char a1 = &quot;123&quot;; ...

Объяснить работу Memcpy - C++
Доброго времени суток! Можете пояснить работу memcpy под C++? Что-то у меня определённо работает не так. Например такой код: ...

Насчёт функции memcpy() - C++
Начинаяю использовать эту функцию.Её синтаксис: void memcpy(void *to, const void *from, size_t count); Вопрос_1: Что такое...

Memcpy и динамические массивы - C++
Почему значение массива A изменилось? Как этого избежать? int *a = new int ; A = 3; a = 5; int *b = new int ; ...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.