Небольшая заметка, посвещена модулю Mxarrays.pas входящиму в Decision Cube. Данному модулю уже больше 10 лет и он включается во все версии Delphi.
Все бы ничего, но так как ревизию данного модуля программисты embercadero не проводили в нынешних уловиях его использовать опасно.
В чем же заключается опасность Mxarrays.pas
При наличии на борту оперативной памяти >= 2 Гб ваша программа при инициализации будет вываливаться к Raised exception class ERangeError with message 'Range check error', разработчики догадались записывать доступное кол-во памяти в Integer - это максимум 2 ГБайта, а если памяти больше, то кол-во уходит минус. Что было нормально 10 лет назад в нынешних условия опасно, тем что на каких то машинах прога будет работать без проблем, а на каких то улетать в Range check error
Второе и тоже немаловажное - это неэффективное использование кода, приводящие к периодическому множественному перераспределение памяти. Конечно это не так страшно, но тоже не всегда приятно.
Резюмируя, можно подытожить - что использвание Mxarrays.pas без координального переделывания чревато проблемами. Лучший конечно вариант - отказаться от него.
Все бы ничего, но так как ревизию данного модуля программисты embercadero не проводили в нынешних уловиях его использовать опасно.
В чем же заключается опасность Mxarrays.pas
При наличии на борту оперативной памяти >= 2 Гб ваша программа при инициализации будет вываливаться к Raised exception class ERangeError with message 'Range check error', разработчики догадались записывать доступное кол-во памяти в Integer - это максимум 2 ГБайта, а если памяти больше, то кол-во уходит минус. Что было нормально 10 лет назад в нынешних условия опасно, тем что на каких то машинах прога будет работать без проблем, а на каких то улетать в Range check error
Второе и тоже немаловажное - это неэффективное использование кода, приводящие к периодическому множественному перераспределение памяти. Конечно это не так страшно, но тоже не всегда приятно.
Резюмируя, можно подытожить - что использвание Mxarrays.pas без координального переделывания чревато проблемами. Лучший конечно вариант - отказаться от него.
Максимально доступное кол-во памяти в Integer -- 2GB, а не 1.5.
ОтветитьУдалитьКстати, это проверялось на практике или так, теоретические рассуждения?
В обычном режиме 32-битному приложению все равно доступно 2GB, независимо от установленной памяти
Ну да, 2 Гб примерно (меньше 2 но больше 1.5), подправил, спасибо. Насчет проверки на практике, столкнулся лично, на машине XP с 2 Гб на борту словил такую ошибку. Причем на работе, где была машина с 1.5 Гб работала программа как часы. Поэтому появился этот пост
ОтветитьУдалить