Russian Qt Forum
Апрель 19, 2024, 05:01 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: STL-compatible контейнеры с семантикой Qt's Implicit Sharing  (Прочитано 6836 раз)
AkonResumed
Чайник
*
Offline Offline

Сообщений: 81


Просмотр профиля
« Ответ #15 : Октябрь 25, 2020, 18:26 »

Да, нужен  QVector<char>, такой что первый байт всегда лежит по адресу, кратному 256 (или любому другому, задаваемому статически). Структура байт в векторе - это уже будет двумерный индекс.
Глянул в отладчике, да, "близок локоть да не укусишь". Выравнивание есть, но не видно как подлезть.

Ну а если "не по теме" Улыбающийся? Верную ли цель Вы ставите (выровненный QVector<char>) и стоит ли ее добиваться? С точки зрения "минимум переделок" - скорее всего да. Но если все делать чисто/кошерно (к чему Вы так явно стремитесь) - то скорее нет. Ведь операции с QVector<char>, хотя бы push_back, erase и.т.п. никак не поддерживают целостность выравниваемых структур.
Нужно, чтобы начало вектора было выровнено, далее программист сам решает, как ему обрабатывать данные в середине. Т.е., он будет читать их кусками по 256 байт, если конкретный обработчик требует выравнивания.

С невыровненным началом - неудобно, size()/begin()/operator[],... уже непосредственно неприменимы.

Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #16 : Октябрь 31, 2020, 10:28 »

Нужно, чтобы начало вектора было выровнено, далее программист сам решает, как ему обрабатывать данные в середине. Т.е., он будет читать их кусками по 256 байт, если конкретный обработчик требует выравнивания.
Ну все-таки данные "первичны", поэтому если требование 256 установлено/принято, то и контейнер должен содержать такие структуры, с тем чтобы все операции удаления/вставки сохраняли целостность данных. А для других обработчиков соскочить на DataView (забыл как называется). Мне это кажется более идейным
Записан
AkonResumed
Чайник
*
Offline Offline

Сообщений: 81


Просмотр профиля
« Ответ #17 : Ноябрь 10, 2020, 22:28 »

Согласен с вашей логикой. По сути требования два: для определенной (математической) обработки - это выравнивание на 256 байт, для наполнения и общей обработки (типа заменить элемент) - это буфер char-ов (QVector<char>).
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.05 секунд. Запросов: 23.