Переход из Delphi на FreePascal под Windows
Модератор: Модераторы
Переход из Delphi на FreePascal под Windows
Имеется проект в виде ряда динамических библиотек, написанных на Delphi7 и содержащие большое колическтво процедур. Возникла проблема в нехватке оперативной памяти для расчетов. Была попытка запустить проект в среде Embarcadero Delphi 2010 на компьютере с 8-ю гигабайтами оперативной памяти и с ОС Windows 7, 64 bit. Однако максимально используемый объем при расчетах - 3 Гб (при превышении которого выдается ошибка "out of memory").
Можно ли переходом на Free Pascal решить данную проблему?
Можно ли переходом на Free Pascal решить данную проблему?
- Sergei I. Gorelkin
- энтузиаст
- Сообщения: 1409
- Зарегистрирован: 24.07.2005 14:40:41
- Откуда: Зеленоград
Проблему нехватки памяти, возможно, удастся решить, но вместо нее могут возникнуть другие...
Sergei I. Gorelkin писал(а):Проблему нехватки памяти, возможно, удастся решить, но вместо нее могут возникнуть другие...
А какую посоветуете версию? Где можно найти?
Я готов попробовать, поскольку иного выхода нет.
- Sergei I. Gorelkin
- энтузиаст
- Сообщения: 1409
- Зарегистрирован: 24.07.2005 14:40:41
- Откуда: Зеленоград
Несколько дней назад вышел релиз 2.4.2, версия для 64-битной винды загружается отсюда: http://www.freepascal.org/down/x86_64/win64.var
Inttelc писал(а):Можно ли переходом на Free Pascal решить данную проблему?
А точно Ваши данные займут больше 3Гб?
Это математические расчеты? Типа, матрицы, да?
Спасибо. Удалось скачать по ссылке
ftp://ftp.freepascal.org/pub/fpc/dist/2 ... -win64.exe
Добавлено спустя 3 минуты 8 секунд:
Да, математическое моделирование переменного магнитного поля. Предел в 3 Гб не дает двигаться дальше.
ftp://ftp.freepascal.org/pub/fpc/dist/2 ... -win64.exe
Добавлено спустя 3 минуты 8 секунд:
stikriz писал(а):Inttelc писал(а):Можно ли переходом на Free Pascal решить данную проблему?
А точно Ваши данные займут больше 3Гб?
Это математические расчеты? Типа, матрицы, да?
Да, математическое моделирование переменного магнитного поля. Предел в 3 Гб не дает двигаться дальше.
Матрицу надо разбить на кубики поменьше, рещить в них, потом решать в кубиках побольше и т.д.
Машинные методы анализа надо посмотреть. Не знаю что у Вас там, наверняка сложнее. А я решал большие линейные уравнения на Sinclar Spectrum методом итераций. 48кб памяти и 320 кб диск. Матрица была под 300Кб. Тоже бил матрицу на кусочки. Все равно большинство данных в расчете участвует не все время. Значит, это большинство данных в оперативной памяти не нужно. Переход на 64 бит поможет преодолеть ограничение по адресации большого объема данных, но все равно нужно сразу писать правильно, да и работать будет быстрее.
Машинные методы анализа надо посмотреть. Не знаю что у Вас там, наверняка сложнее. А я решал большие линейные уравнения на Sinclar Spectrum методом итераций. 48кб памяти и 320 кб диск. Матрица была под 300Кб. Тоже бил матрицу на кусочки. Все равно большинство данных в расчете участвует не все время. Значит, это большинство данных в оперативной памяти не нужно. Переход на 64 бит поможет преодолеть ограничение по адресации большого объема данных, но все равно нужно сразу писать правильно, да и работать будет быстрее.
Я прорбовал реализовать метод блочных итераций. Получилось не очень. А времени доделывать пока нет. Нужно срочно доделать рассчет.
Скачал lazarus под win32 (lazarus-0.9.28.2-fpc-2.2.4-win32) - запустил свой проект дома - работает
Под win64 (lazarus-0.9.28.2-fpc-2.2.4-win64) - на работе нет. Долго компилирует.
Скачал lazarus под win32 (lazarus-0.9.28.2-fpc-2.2.4-win32) - запустил свой проект дома - работает
Под win64 (lazarus-0.9.28.2-fpc-2.2.4-win64) - на работе нет. Долго компилирует.
Компилится?
Если Вы читаете данные из файла заранее созданного, ну и не только, то обратите внимание, что под 64 бита размерность данных изменилась. Используйте реальные типы данных, а не псевдонимы. Integer, например 64 бита, а был 32... Т.е. структуры, Sizeof_ы искать и править. Это первое что приходит на ум.
Если Вы читаете данные из файла заранее созданного, ну и не только, то обратите внимание, что под 64 бита размерность данных изменилась. Используйте реальные типы данных, а не псевдонимы. Integer, например 64 бита, а был 32... Т.е. структуры, Sizeof_ы искать и править. Это первое что приходит на ум.
- Иван Шихалев
- энтузиаст
- Сообщения: 1138
- Зарегистрирован: 15.05.2006 11:26:13
- Откуда: Екатеринбург
- Контактная информация:
stikriz писал(а):Integer, например 64 бита
о_О
Насколько мне известно, это не так. 16 в режимах TP и FPC, 32 — DELPHI и OBJFPC.
Сейчас проверил - так и есть.
Добавлено спустя 2 минуты 7 секунд:
Я был уверен, что Integer должен стать int64, как в Delphi при переходе с 16 на 32 бита из 16 битной стал 32 битным.
Непорядок...
Добавлено спустя 2 минуты 7 секунд:
Я был уверен, что Integer должен стать int64, как в Delphi при переходе с 16 на 32 бита из 16 битной стал 32 битным.
Непорядок...
stikriz
Пичитайте вот это. Написано убого, но доходчиво.
Пичитайте вот это. Написано убого, но доходчиво.
Копированием кода из DLL в основной модуль программы удалось добиться результата - программа считает. Уже пробовал загрузить оперативу по максимуму где-то 7100 Мб. DLL-ки с 32-битным кодом он не загружает. Вообще скаченная мною версия lazarus-0.9.28.2-fpc-2.2.4-win64 какя-то не доработанная (по моему): неудобно искать ошибки в коде. После первой попытки поставить программу на счет на ночь не хватило памяти, lazarus вместо таго чтобы выдать сообщение "out of mamory", как это делает Delphi, просто закрылся. Также, никак не могу разобраться как создавать DLL. В Delphi все просто: создаю новое приложение (libriary), сохраняю, компилирую (даже пустую, без кода) и в папке, в которую сохранил появляется соответствующий *.dll фал. Тут, в lazarus-е выдается ошибка: "Debugger erroe. Ooops, the debugger entered the error state. Save your work now! Hit Stop, and hope the best,we're pulling the plug". dll фал при этом не создается, вернее файл находится в процессе компиляции *.compilled
-
Павел Ишенин
- постоялец
- Сообщения: 475
- Зарегистрирован: 24.03.2007 09:16:52
А если нажать Ctrl+F9 вместо F9? В дневных сборках этот баг поправлен.
Где можно скачать наиболее стабильную версию?
Вот, с горем пополам создал DLL-ку, запустил. Программа считала. Затем, внезапно перестала компилировать, - пишет что отсутствует fpcmemdll.dll.
Вот, с горем пополам создал DLL-ку, запустил. Программа считала. Затем, внезапно перестала компилировать, - пишет что отсутствует fpcmemdll.dll.
