![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Illusion Dolphin |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1198 Регистрация: 3.5.2003 Репутация: нет Всего: 63 |
Мне в программе под DOS нужно выделить памяти более 64 килобайт, для чего использую модель памяти huge. Нашёл как выделять отдельный сегмент данных, пример из справки такой:
Вoт только никак не пойму, как теперь использовать эту память. Покажите, пожалуйста, как, например, выделенную память использовать кк массив целых чисел (int *). -------------------- В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен. Шифрование и организация фотографий - Photo Database 4.5 |
|||
|
||||
| manu |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 14.10.2004 Репутация: 2 Всего: 3 |
Я предлагаю тебе использовать Watcom С++ и какой-нибудь из поставляемых с ним расширителей памяти. С ними можешь выделять хоть десятками мегабайт...
|
|||
|
||||
| Illusion Dolphin |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1198 Регистрация: 3.5.2003 Репутация: нет Всего: 63 |
А если без посторонних средств? Ведь в примере явно выделяется память. и вопрос всего в том, как её использовать.
-------------------- В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен. Шифрование и организация фотографий - Photo Database 4.5 |
|||
|
||||
| manu |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 14.10.2004 Репутация: 2 Всего: 3 |
Раз уж хочется без посторонних средств, то напиши враппер. Что-то типа этого:
template<class T> class wrapper { private: enum { max_size=0x10000, nblocks=10 }; T *blocks[nblocks]; public: wrapper(long size) { здесь выделяем блоки памяти максимального размера и записываем указатели на их начала в blocks[ } T &operator[](long n) { int block_number=n/max_size,block_offset=n%max_size; return blocks[block_number][block_offset]; } }; В общем что-то такое, хотя я не уверен, лет 10 как под MS-DOS не программировал... А к Watcom ты присмотрись, штука очень удобная. Да, кстати, попробуй использовать himem.sys или emm386.exe, они тоже большие блоки позволяют выделять. А как их программировать я точно не помню. Добавлено @ 16:15 Конкретно в твоем примере: int far *fp=MK_FARP(segp,0); // че-то такое было в BC++ // если не найдешь этот макрос, то он работает так: #define MK_FARP(seg,off) ((void *)((long)seg << 10 | off)) |
|||
|
||||
| Illusion Dolphin |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1198 Регистрация: 3.5.2003 Репутация: нет Всего: 63 |
спасибо!
-------------------- В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен. Шифрование и организация фотографий - Photo Database 4.5 |
|||
|
||||
| alien_by |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 82 Регистрация: 29.11.2004 Где: Belarus/Gomel Репутация: нет Всего: 8 |
Можешь попробовать перенастроить сегмент данных на полученную область памяти
Я не уверен что это будет работать, но вдруг возникнут новые идеи... |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |