вторник, 15 марта 2011 г.

Опасный MxArrays

Небольшая заметка, посвещена модулю 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 без координального переделывания чревато проблемами. Лучший конечно вариант - отказаться от него.



2 комментария:

  1. Максимально доступное кол-во памяти в Integer -- 2GB, а не 1.5.
    Кстати, это проверялось на практике или так, теоретические рассуждения?
    В обычном режиме 32-битному приложению все равно доступно 2GB, независимо от установленной памяти

    ОтветитьУдалить
  2. Ну да, 2 Гб примерно (меньше 2 но больше 1.5), подправил, спасибо. Насчет проверки на практике, столкнулся лично, на машине XP с 2 Гб на борту словил такую ошибку. Причем на работе, где была машина с 1.5 Гб работала программа как часы. Поэтому появился этот пост

    ОтветитьУдалить