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

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

Страниц: 1 [2] 3 4   Вниз
  Печать  
Автор Тема: reinterpret_cast класса в массив  (Прочитано 23845 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #15 : Январь 21, 2016, 04:58 »

QVector3D богомерзок...
А на чем основывается это мнение ?
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #16 : Январь 21, 2016, 12:16 »

Ну вот нужно, например, glVertexPointer использовать.
Массив из QVector3D надо сперва преобразовать в массив флотов.
Потому что чего-то типа QVector3DList у нас нету, и никто не гарантирует, что эти вектора будут лежать в памяти последовательно.
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #17 : Январь 21, 2016, 12:21 »

Ну вот нужно, например, glVertexPointer использовать.
Массив из QVector3D надо сперва преобразовать в массив флотов.
Потому что чего-то типа QVector3DList у нас нету, и никто не гарантирует, что эти вектора будут лежать в памяти последовательно.
QVector3D сейчас это:
Код
C++ (Qt)
struct
{
   float x;
   float y;
   float z;
}
 
со всеми гарантиями, что вектор таких структур будет хранить их последовательно.

То, что завтра этот класс может изменить свою внутреннюю структуру, это другой вопрос.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #18 : Январь 21, 2016, 12:37 »

Ну вот нужно, например, glVertexPointer использовать.
Массив из QVector3D надо сперва преобразовать в массив флотов.
Потому что чего-то типа QVector3DList у нас нету, и никто не гарантирует, что эти вектора будут лежать в памяти последовательно.
glVertexPointer (как и др ф-ции передачи геометрии) имеет stride, который как раз для данных "не идущих подряд". Так что это не проблема

Еще аргументы против QVector3D? Или Вы просто так сказали про "богомерзкость"?  Улыбающийся
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #19 : Январь 21, 2016, 12:51 »

То, что завтра этот класс может изменить свою внутреннюю структуру, это другой вопрос.

Как минимум это уже потенциальная проблема.
К тому же при аллокации вектора будут вызываться конструкторы класса, соответственно деструкторы при деаллокации. Производительность будет страдать.

stride может сам по себе и не проблема, но это еще один дополнительный параметр, который придется принимать во внимание.

Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #20 : Январь 21, 2016, 12:55 »

Так а конструктор в этом классе ничем не отличается от обычного копирования float, деструктор по умолчанию. Думаю, что все потенциально лишние копирования компилятор соптимизирует.
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #21 : Январь 21, 2016, 13:05 »

Так а конструктор в этом классе ничем не отличается от обычного копирования float, деструктор по умолчанию. Думаю, что все потенциально лишние копирования компилятор соптимизирует.

Хорошо, если так. Но если вдруг разработчик решит еще пару фич туда запихать?
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #22 : Январь 21, 2016, 13:07 »

Хорошо, если так. Но если вдруг разработчик решит еще пару фич туда запихать?
А вот тогда, его придется заменить своим, с нужным устройством и поведением. Улыбающийся
Но это "тогда", а чем он вам сейчас не нравиться?
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #23 : Январь 21, 2016, 13:08 »

Ну тогда
а если завтра поломают кютешный, то пишете свой класс, и меняете только тайпдеф:
Код
C++ (Qt)
typedef MyValidVector3D Vector3D;
 
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #24 : Январь 21, 2016, 13:14 »

Но это "тогда", а чем он вам сейчас не нравиться?

Не люблю неожиданностей и неопределенности.
Нет, как отдельное представление трехмерного вектора, класс неплох Улыбающийся
distanceToLine там всякое умеет и т.д.
Но если идет речь о приложении, где производительность превыше всего - хочется иметь больше контроля над процессом.
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #25 : Январь 21, 2016, 13:20 »

stride может сам по себе и не проблема, но это еще один дополнительный параметр, который придется принимать во внимание.
Воткнуть вместо нуля sizeof - ой как много работы  Улыбающийся

К тому же при аллокации вектора будут вызываться конструкторы класса, соответственно деструкторы при деаллокации. Производительность будет страдать.
Совершенно верно
Так а конструктор в этом классе ничем не отличается от обычного копирования float, деструктор по умолчанию. Думаю, что все потенциально лишние копирования компилятор соптимизирует.
Нет, конструктору велено заполнить нулями - он и заполнит
Код
C++ (Qt)
std::vector <QVector3D> vec(n);
<QVector3D> temp[32];  // или так
<QVector3D> v0, v1, v2;  // или даже так
 
Все это будет притормаживать за счет дефаултного конструктора. И на хорошей кратности это быстро становится ощутимым. Тут не UI где на такие вещи можно спокойно забивать. Поэтому грамотная реализация - пустой конструктор по умолчанию.

Ну это еще цветочки. Что еще плохо в QVector3D ?



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

Сообщений: 4350



Просмотр профиля
« Ответ #26 : Январь 21, 2016, 13:25 »

Не люблю неожиданностей и неопределенности.
Вы переживаете, что изменится внутреннее устройство?

Но если идет речь о приложении, где производительность превыше всего - хочется иметь больше контроля над процессом.
Что это значит? Вам не хватает функционала, вы хотели бы, что-бы он был более наворочен? Тогда с производительностью это может быть не совместимо.

Не обижайтесь, но пока это похоже на капризы, основанные на страхе. Подмигивающий
Ну и да, я не призываю использовать QVector3D. Улыбающийся
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #27 : Январь 21, 2016, 13:33 »

"Сам по себе" QVector3D не является чем-то ужасно плохим Улыбающийся
Просто, скажем так, все зависит от области применения.
Если надо посчитать несколько десятков 3д-векторов в пространстве - то не проблема. Сами юзаем иногда.
Но когда речь о высокопроизводительном приложении с большими объемами данных - то для подобных целей считаю данный класс неуместным.
Раньше приложение у нас использовало массивы из QVector3D. Когда перешли на plain float array - производительность выросла, а расход памяти уменьшился. Плюс стало возможно "напрямую" юзать всякие там sse-интринзики Улыбающийся
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #28 : Январь 21, 2016, 13:37 »

"Сам по себе" QVector3D не является чем-то ужасно плохим Улыбающийся
Является

производительность выросла, а расход памяти уменьшился. Плюс стало возможно "напрямую" юзать всякие там sse-интринзики Улыбающийся
производительность - верю. Но расход памяти и, особенно, "sse-интринзики" - ой заливаете  Улыбающийся
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #29 : Январь 21, 2016, 13:44 »

Является
Почему? Улыбающийся

производительность - верю. Но расход памяти и, особенно, "sse-интринзики" - ой заливаете  Улыбающийся

"вай, мамай клянус!"
А как прикажете применить интринзики к QVector3D  Непонимающий
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Страниц: 1 [2] 3 4   Вверх
  Печать  
 
Перейти в:  


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