MQL5: Для структур добавлено свойство pack( integer_value ). Оно позволяет задать выравнивание расположения полей внутри структуры, это бывает необходимо при работе с DLL. Для integer_value возможны значения 1, 2, 4, 8 и 16. Если свойство не определено, по умолчанию используется вырванивание в 1 байт — pack(1).
Пример использования:
//+------------------------------------------------------------------+//| Default packing |//+------------------------------------------------------------------+struct A
{
char a;
int b;
};
//+------------------------------------------------------------------+//| Specified packing |//+------------------------------------------------------------------+struct B pack(4)
{
char a;
int b;
};
//+------------------------------------------------------------------+//| Script program start function |//+------------------------------------------------------------------+voidOnStart()
{
Print("sizeof(A)=",sizeof(A));
Print("sizeof(B)=",sizeof(B));
}
//+------------------------------------------------------------------+
Вывод:
sizeof(A)=5
sizeof(B)=8
Более подробная информация о выравнивании в структурах доступно в MSDN.
Вот ещё интересная задача: сделать функцию сортировки массива более быструю, чем встроенный ArraySort.
А что, размеры всех структур гарантированное делятся на размеры всех переменных?
Могу ли я направить мозговой штурм на быструю реализацию перевода массива структур (длина кратна sizeof(int)) в массив int[] и обратно?
///
Просто после описания структуры пишем еще несколько строк с объединением, включающим эту структуру и массив.
Можно даже не писать после каждой структуры, а зашаблонить - кому как удобней.
А что, размеры всех структур гарантированное делятся на размеры всех переменных?
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Получаем количество десятичных знаков после запятой любых чисел (не только котировок) в обход Digits() на MQL4 и MQL5
fxsaber, 2018.12.07 15:12
Могу ли я направить мозговой штурм на быструю реализацию перевода массива структур (длина кратна sizeof(int)) в массив int[] и обратно?
В общем случае решение лежит по этой же ссылке, но из-за универсальности там тормоза. Поэтому кратность - вполне объяснимое доп. условие.
Еще это появилось
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Новая версия платформы MetaTrader 5 build 1930: Плавающие окна графиков и .Net библиотеки в MQL5
MetaQuotes Software Corp., 2018.10.25 17:18
Если свойство не определено, по умолчанию используется вырванивание в 1 байт — pack(1).
Пример использования:
Вывод:
Более подробная информация о выравнивании в структурах доступно в MSDN.
Просто после описания структуры пишем еще несколько строк с объединением, включающим эту структуру и массив.
Можно даже не писать после каждой структуры, а зашаблонить - кому как удобней.
Не понял. Если есть желание поучаствовать, напишите свой вариант, пожалуйста.
Могу ли я направить мозговой штурм на быструю реализацию перевода массива структур (длина кратна sizeof(int)) в массив int[] и обратно?
а почему в инт? а не в чар?
(и лонг длиннее будет - быстрее скопируется)
а почему в инт? а не в чар?
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Получаем количество десятичных знаков после запятой любых чисел (не только котировок) в обход Digits() на MQL4 и MQL5
fxsaber, 2018.12.07 15:12
Практическое применение - быстрый обмен данными через ресурсы. Мой вариант слишком универсальный, поэтому тормозит.
Видимо, у Вас уже быстрее :)
Попробую значительно ускорить.
Не понял. Если есть желание поучаствовать, напишите свой вариант, пожалуйста.
Так написал же.
В общем случае решение лежит по этой же ссылке, но из-за универсальности там тормоза. Поэтому кратность - вполне объяснимое доп. условие.
Еще это появилось
Кто будет контролировать эту кратность?