· Начало · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› malloc/new: Как заставить юзать свап?

. 1 . 2 . >>

Посл.отвђт Сообщен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(ИМХО первое лучше), а если нужно больше гига данных, то используй файл для промежуточного хранения.
Вообще пчти вся память может попасть в своп, если не используется(читай статьи про защищенный режим)

. 1 . 2 . >>