Помогите решить проблему — необходим vector размером более 64K (компилятор borland с++ 5.2 c++ dos ).
STL в поставке этого не поддерживает (отраничение int).
Оригинальный STL от HP в котором есть hvector.h и т.д.
не компилится...
Вообщем необходимо либо заставить работать STL от HP,
либо нужна другая библиотека с поддержкой vector >64К и итераторы.
Здравствуйте, Botan2, Вы писали:
B>Помогите решить проблему — необходим vector размером более 64K (компилятор borland с++ 5.2 c++ dos ). B>STL в поставке этого не поддерживает (отраничение int). B>Оригинальный STL от HP в котором есть hvector.h и т.д. B>не компилится... B>Вообщем необходимо либо заставить работать STL от HP, B>либо нужна другая библиотека с поддержкой vector >64К и итераторы.
а не дешевле борланда заставить компилить 32-разрядный код для DOS?
B>>Быть может имеет смысл переопределить size_t как unsigned long?
B>Пробовал, но на этом проблемы не кончаются. Проблема там глубже... Уперся в выделение памяти в allocator'е.
Современные реализиции вектора здесь не помогут,
т.к. для huge указателя действует другая векторная
арифметика с нормализацией указателя.
В вашем случае ошибка происходит из-за ограничения на размер сегмента 64 кб.
Больше этого размера выделить непрерывный блок памяти не получиться
(вернее получиться может, но базовый сегмент будет разный).
Значит не будет выполнено требование к вектору о размещении его в непрерывной области памяти.
Для обхода нужно переписывать Allocator и итератор под себя.
Но существует обходной путь!
На RSDN уже упоминались DOS разширения защищённого режима,
по моему, там решалась и проблема с контейнерами STL.
Здравствуйте, assad, Вы писали:
A>Но существует обходной путь! A>На RSDN уже упоминались DOS разширения защищённого режима, A>по моему, там решалась и проблема с контейнерами STL.