Как в 64 приложение происходит импорт функций из 32 битных dll типа user32.dll и т.д. Или для них есть копии в системе с таким названием и создается OOP пространство ?
Ну для начала в х64 системах есть эмулированый запуск х86 программ. Вопрос в другом как в х86 запускать х64 программы?
Urain: Вопрос в другом как в х86 запускать х64 программы?
Это точно не получится. Процессор x86 не может выполнять 64-битные инструкции.
sergeev:
Может вопрос вообще не в терминале а в каком то хитром компилировании этих самых DLL ?
Ведь работают DLL от виндовых API. Наприемр user32, kernel32, winmm, wininet в 32/64 битном терминале.
решение проблемы видать где то лежит в другой плоскости.
Вот тут что-то есть. Т.е. теоретически можно заставить работать 32-битные DLL и там и сям.
Наверное пора звать разработчиков.
// У меня на x64 перестала работать 32-битная DLL скомпиленная "наивным" образом. Но возможно есть более хитрые способы компиляции. Во всяком случае прецеденты "имеют место есть" (с) -
Ведь работают DLL от виндовых API. Наприемр user32, kernel32, winmm, wininet в 32/64 битном терминале.
По памяти, правда жутко не экономно, для сравнения
C2Xdouble X(1000,1000);
Print("X(100,100).SizeOF() = ",X.SizeOf());
// добавил в ваши классы вычисление размера
-----
C2DMagicArray MA(1000,1000);
Print("MA(100,100).SizeOF() = ",sizeof(MA)+MA.SizeOf());
// это мой. у меня MA.SizeOf() возвращает только размер чистого буфера, поэтому по честному добавил размер класса. :)
Разница в 6 раз. Учитывая что у меня буфер float - в три. // и есть ещё у вас неявный грабёж памяти - системная таблица дескрипторов классов (в данном примере) у вас 1000*1000+1000, а у меня - 1 (!)
Скорость работы практически одинаковая.
Будете уменьшаться? ;)
--
зы. Пожалуй приврал. У вас субклассы все статические, так что неявный грабёж несколько преувеличен. Вычёркиваю. :)
Кратко. Функции системных библиотек для x86 (32 бита) процессов имеют специальную обёртку, через которую они переходят в x64, выполняются и возвращаются обратно в x86.
mql5: Кратко. Функции системных библиотек для x86 (32 бита) процессов имеют специальную обёртку, через которую они переходят в x64, выполняются и возвращаются обратно в x86.
Спасибо за инфу.
А не подскажете как такое же самостоятельно сварганить? Можно просто ссылку (если есть).
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
И поэтому есть вопрос номер один.
Как в 64 приложение происходит импорт функций из 32 битных dll типа user32.dll и т.д. Или для них есть копии в системе с таким названием и создается OOP пространство ?
Ну для начала в х64 системах есть эмулированый запуск х86 программ. Вопрос в другом как в х86 запускать х64 программы?
Может вопрос вообще не в терминале а в каком то хитром компилировании этих самых DLL ?
Ведь работают DLL от виндовых API. Наприемр user32, kernel32, winmm, wininet в 32/64 битном терминале.
решение проблемы видать где то лежит в другой плоскости.
Вопрос в другом как в х86 запускать х64 программы?
Может вопрос вообще не в терминале а в каком то хитром компилировании этих самых DLL ?
Ведь работают DLL от виндовых API. Наприемр user32, kernel32, winmm, wininet в 32/64 битном терминале.
решение проблемы видать где то лежит в другой плоскости.
Вот тут что-то есть. Т.е. теоретически можно заставить работать 32-битные DLL и там и сям.
Наверное пора звать разработчиков.
// У меня на x64 перестала работать 32-битная DLL скомпиленная "наивным" образом. Но возможно есть более хитрые способы компиляции. Во всяком случае прецеденты "имеют место есть" (с) -
Ведь работают DLL от виндовых API. Наприемр user32, kernel32, winmm, wininet в 32/64 битном терминале.
Ну так сделайте по этой аналогии... делов-то!... :-))
А я посмотрю. ;)
Простейший вариант применительно к вашему случаю.
Ну для простейшего случая - зачёт. "Я Вас записываю" (с) :)
По памяти, правда жутко не экономно, для сравнения
результат:
Разница в 6 раз. Учитывая что у меня буфер float - в три. // и есть ещё у вас неявный грабёж памяти - системная таблица дескрипторов классов (в данном примере) у вас 1000*1000+1000, а у меня - 1 (!)
Скорость работы практически одинаковая.
Будете уменьшаться? ;)
--
зы. Пожалуй приврал. У вас субклассы все статические, так что неявный грабёж несколько преувеличен. Вычёркиваю. :)
Наверное пора звать разработчиков.
Функции системных библиотек для x86 (32 бита) процессов имеют специальную обёртку, через которую они переходят в x64, выполняются и возвращаются обратно в x86.
Кратко.
Функции системных библиотек для x86 (32 бита) процессов имеют специальную обёртку, через которую они переходят в x64, выполняются и возвращаются обратно в x86.
Спасибо за инфу.
А не подскажете как такое же самостоятельно сварганить? Можно просто ссылку (если есть).
Будете уменьшаться? ;)
Нет, я по возможности использую одномерные массивы.
Ок. Вопросы оптимизации в данном случае вторичны. Подвиг защитан по любому.
--
Могу следующую задачку предложить.
Массив произвольной размерности (для определённости ограничим, скажем, до ^16).
Размерность задаётся при создании количеством параметров, как для обычных массивов.
XXArray xx2(5,7), xx5(12,12,16,16,8);
Должны для всех размерностей работать индексаторы ( A[i][j][k][n][m]....)