|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Июл 25, 2003 00:08:59 · Поправил: Quantum Есть старая прога (VC6), которая создаёт огромный массив данных в памяти, используя для этого malloc/new и иже с ними. Иногда эти ф-ции возвращают NULL и прога падает. Я немного подоптимизировал прогу и теперь она падает реже, но... Нельзя ли как-то заставить винду юзать файл (свап) вместо памяти во избежание исключений с динамической памятью? Может заменить new на специальную API? Заранее спасибо! |
|
|
Дата: Июл 25, 2003 03:14:42 Так прога что , в исходнике на C? Если да, то можешь IN OPTIONS /PROGRAM MODEL[TINY-default!!!] && STACK SIZE izmenit eti parametri i RECOMPILE To est sdelaesh iz malenkoj kuchi derma bolsuyu. Moj tebe sovet kak postradavsego usera(izvini chto pishu na translite no na russkom medlenno budya) KUPI SEBE LUCHE MEMORY a to vint posipetsya kak rodnoj... |
|
|
Дата: Июл 25, 2003 03:25:01 PING KUPI SEBE LUCHE MEMORY Ты меня не понял. Прога должна использовать ОЧЕНЬ много памяти (в куче столько нет и не будет). Необходимо заставить её писать в свап. Всё равно, спасибо за ответ. |
|
|
Дата: Июл 25, 2003 04:32:36 Quantum VirtualAlloc? MMF? |
|
|
Дата: Июл 25, 2003 04:43:54 P2M VirtualAlloc? Попробую MMF? Слишком сложно. Я думал есть способ натравить malloc/new на виртуальную память... ЗЫ: Исходников, кстати, нету :( |
|
|
Дата: Июл 25, 2003 05:31:30 Quantum Исходников чего? |
|
|
Дата: Июл 25, 2003 07:02:06 Исходников этой старой проги... Поэтому радикальные изменения в код внести не получится. |
|
|
Дата: Июл 25, 2003 07:36:00 Quantum :) Что может быть радикальнее, чем написать программу заново. |
|
|
Дата: Июл 25, 2003 07:48:41 8-[] Такой совет на сон грядущий... Тут дело в том, что я откопал эту старую прогу и обнаружил, что она делает 90% того, что мне нужно в новой программе и реализовано это старьё в основном ввиде DLL. Подарок, не правда ли? Я её потихоньку сконвертил в LIB и зашил в свой project. НО старьё всегда работало с небольшим объёмом данных и проблем с динамической памятью не возникало... Обидно, блин!!! |
|
|
Дата: Июл 25, 2003 10:48:07 можно попробовать переопределить new, если прога на C++ или скомпилять ее в С++. inline void * __cdecl operator new(unsigned int size){ return size ? VirtualAlloc(...) : NULL;} |
|
|
Дата: Июл 25, 2003 14:11:03 Quantum Вся память -- ВИРТУАЛЬНАЯ :) malloc -- это как правило Хип. Впрочем это и есть СВАП... |
|
|
Дата: Июл 25, 2003 15:37:38 А ты предварительно проверил, будет ли оно работать с таким объёмом данных, если они уместятся в память? Просто, реализация одних и тех же базовых алгоритмов для работы в оперативке и в свопе очень различается. Произвольный доступ ко всему объёму данных в свапе способен убить любую производитльность. Больше скажу, разница может быть незначительной _только_ в том случае, когда нахождение всего объёма данных в оперативной памяти вообще не является необходимым условием. |
|
|
Дата: Июл 25, 2003 19:50:13 Edmond Впрочем это и есть СВАП... Тогда почему new возвращает NULL? bsl_zcs будет ли оно работать с таким объёмом данных Прога почти гладко работает под Win2000 (хипа, видно, больше). Зато под 9x падает именно на new (где-то после 600 вызовов). andsin переопределить new Были бы исходники этой проги... |
|
|
Дата: Июл 25, 2003 20:26:01 === "Тогда почему new возвращает NULL?" === На Win9x можно попробовать сделать SWAP-файл большего размера. |
|
|
Дата: Июл 25, 2003 21:20:22 · Поправил: GanDJuStas Если нужна динаическая память юзай GlobalAlloc или VirtualAlloc(ИМХО первое лучше), а если нужно больше гига данных, то используй файл для промежуточного хранения. Вообще пчти вся память может попасть в своп, если не используется(читай статьи про защищенный режим) |