Структура - всегда строка, потому ответ - не верный.
String всегда в конец.
В начало структуры чётные данные.
И ещё. Поиск в базе очень ускоряется.
Вопрос к знатокам. На днях открыл для себя, что просто так собирать структуру из различных типов данных, сортируя их только по своему усмотрению является неверным подходом (с чисто технической точки зрения). Почитал справку, погуглил и решил для себя выравнивать все примитивные типы данных под 8 байт. То есть, если раньше я использовал в структурах вразброс типы int и double, то сейчас думаю инты заменить на лонги (чтобы каждое значение в такой структуре ровнялось 8 байтам). И в этом заключается первый вопрос - является ли такой подход верным?
Второй вопрос: как выравнивать структуру, если помимо примитивных типов данных в ней используются типы string?
И третий вопрос: вот этим всем реально нужно заморачиваться?
Не нужно этим заморачиваться.
Хорошо, получается компилятор сам проводит все необходимые выравнивания, но наверное только в режиме оптимизиции. Иначе не очень понятно, зачем тогда про выравнивание упоминается в справке https://www.mql5.com/ru/docs/basis/types/classes
p.s. Хотелось бы все-таки узнать какой алгоритм выравнивания используется, если в структуре помимо простых типов используются с десяток различных значений типа string
- www.mql5.com
Хорошо, получается компилятор сам проводит все необходимые выравнивания, но наверное только в режиме оптимизиции. Иначе не очень понятно, зачем тогда про выравнивание упоминается в справке https://www.mql5.com/ru/docs/basis/types/classes
p.s. Хотелось бы все-таки узнать какой алгоритм выравнивания используется, если в структуре помимо простых типов используются с десяток различных значений типа string
А вы обратили внимание на эту строку
Такое описание выровненных структур необходимо только для передачи в импортированные dll-функции.
Спасибо, это действительно пропустил. Но все же, хотелось бы на будущее поглубже разобраться в данном вопросе. Вопрос с импортированием dll функций еще не изучал, но может это тоже когда-нибудь придется изучить. Или в импортированные dll функции передаются только простые типы?
А что все так парятся насчет выравнивания ? Там что - прямо в разы скорость доступа различается ? Думаю нет. Кто-нибудь вообще тестировал скорость доступа к выровненным и невыровненным данным ? Думаю, разница будет в пределах погрешности измерения.
Если не считать каких-то потенциальных системных ошибок из-за неправильного выравнивания, мои опасения, как раз, больше всего связаны с тем, что при тестировании на большом историческом периоде такая погрешность может занять большое дополнительное время.
А местный string ни разу не указатель, а обертка над ним и занимает в памяти 12 байт (MQL5), и опять блин помни про выравнивание, поставишь после него long и привет оверхед.
Можете пояснить, что означает оверхед в данном контексте?
Если не считать каких-то потенциальных системных ошибок из-за неправильного выравнивания, мои опасения, как раз, больше всего связаны с тем, что при тестировании на большом историческом периоде такая погрешность может занять большое дополнительное время.
Можете пояснить, что означает оверхед в данном контексте?
Очень сильно сомневаюсь что из-за этого могут быть какие-то ошибки. А на результаты тестов скорости взглянуть было бы любопытно.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Второй вопрос: как выравнивать структуру, если помимо примитивных типов данных в ней используются типы string?
И третий вопрос: вот этим всем реально нужно заморачиваться?