Виртуальная память
WIN32_FIND_DATA FileData.nFileSizeLow не правельно размер файлов более 2Гб отображает, хотя в свойствах проекта поставил "Поддерживаются адреса, большие, чем 2 гигабайта (/LARGEADDRESSAWARE)"
Отсюда делаем вывод - писать на них параллельно, данные с исходного подкачивать по мере надобности, записанные данные из памяти выкидывать.
А я не говорил что нужно ждать. Я говорил об освобождении памяти по мере записи данных. Тот кто записывает быстрее будет проталкивать в буфер все новые данные, тот кто записывает медленнее - будет задерживать данные в памяти.
тем более допустим первый записан на 60%, второй на 100%
вставляю следующий диск во второй слот, пока первый не записался, он занимает 40% места в оперативке(конечно если её объем равен емкости диска) а второй пока первый не записался, будет загружать буфер. Так вот это если 2 диска, а если 20 и если их объем 16 Гб??? очень велика вероятность переполнения памяти, а это критический сбой, и партию будет необходимо дозаписывать, за такую программу мне спасибо не скажут))) выигрыша от этого будет не достаточно, проще через оперативку
очень велика вероятность переполнения памяти, а это критический сбой
Подкачку данных в память всегда можно приостановить и очередь на запись держать в размерах физической памяти. Если все данные умещаются в памяти - замечательно, будут минимизированы обращения к исходному носителю. Если же нет - приходится выбрасывать часть данных из памяти, ваша задача в некотором смысле сродни алгоритмам подкачки, которые реализует ОС (по сути тоже самое, редкоиспользуемые страницы памяти она перемещает на жесткий диск).
Значит нужно в программе указывать требование - много-много Гб физической озу. :) И ограничивать размер записи в таком режиме только размером оперативной памяти.
А вообще в вашем случае может помочь SSD накопитель в качестве исходного носителя - у него него очень быстрый индексный доступ.
Примерный алгоритм работы я уже обрисовал. В качестве инструмента реализации подкачки с диска я бы попробовал использовать File Map, правда я не знаю как поведет он себя при копировании действительно больших файлов - надо проверять.
Как обработать исключение переполнения оперативной памяти чтобы задействовать нормально виртуалку? Ответьте пожалуйста если не сложно!
Не пытаться выделять память если ее элементарно нету в наличии :)
Можно поступить иначе. В начале работы программы занять все возможное пространство и работать с ним - это безопаснее.
а это.. надо морально готовиться перед походом на форум! как будто это свидание :D
интересно, кто тут тебя переубеждал, чего-то я не увидел? - цитируй хоть!
напиши книгу, заработаешь кучу бабла, даже я куплю почитать
см.ниже
у меня мозги наверное быстрее работают чем тут коменты пишут,
я плакалъ, но будем надеяться что это так
Как обработать исключение переполнения оперативной памяти чтобы задействовать нормально виртуалку?
тут вспоминается про физкультурный.. ты уж разберись в понятиях - что такое виртуалка, что такое адресное пространство, и где в них у тебя оперативка. а то неоднозначное впечатление складывается :cool:
WIN32_FIND_DATA FileData.nFileSizeLow не правельно размер файлов более 2Гб отображает
структуру хоть глянь целиком
хотя в свойствах проекта поставил "Поддерживаются адреса, большие, чем 2 гигабайта (/LARGEADDRESSAWARE)"
вообще не связанные понятия. почитай справку по параметру
swprintf(Ukaz->File,L"%s\\%s",NameFolder,FileData.cFileName);
Ukaz->Next=NULL;
if(myFileSizeStatus>BUFERSIZE){
Ukaz->Attribute=0;
myFileSizeStatus-=BUFERSIZE;
do{
NewBufer=false;
try{
Ukaz->Bufer=new BUFERTYPE[BUFERSIZE];//Попытка выделить память
}catch(...){//Обработка исключения если память выделить не возможно
NewBufer=true;//условие для повторной попытки выделить память
Sleep(TIMEWAIT);
}
}while(NewBufer);
Ukaz->Size=fread(Ukaz->Bufer,BUFERKLASTER,BUFERSIZE,File);
}else{
Ukaz->Attribute=FileData.dwFileAttributes;
do{
NewBufer=false;
try{
Ukaz->Bufer=new BUFERTYPE[myFileSizeStatus];
}catch(...){
NewBufer=true;
Sleep(TIMEWAIT);
}
}while(NewBufer);
Ukaz->Size=fread(Ukaz->Bufer,BUFERKLASTER,myFileSizeStatus,File);
myFileSizeStatus=0;
}
а FileData.nFileSizeLow реально не могу прибавить к своей переменной unsigned long, FileData.nFileSizeHigh всегда в моей программе равнялось нулю. хз...
При втором проходе:
А при третьем
тебе выше уже намекали что нечего страдать ерундой . для этих намёков были вполне объективные причины . )
ну и что что стоит )
в 64битной винде для пользовательского процесса всё равно выделяется только 4 гига .
лучший выход для вас - поставить флешку на 128 гигов и использовать её как буфер .
а для безопасности флешку скрыть от пользователей . )
в 64битной винде для пользовательского процесса всё равно выделяется только 4 гига .
Дану? Для 32-битного процесса я еще могу понять, но не для 64-битного (какой иначе смысл в удвоенной разрядности).
сейчас для винды считают достаточным 4 гига .
64 битную адресацию использует система .
Он этого не утверждал. ;)
64 битную адресацию использует система .
Снова мимо.
если ты такой умный , то помоги топикстартеру . )
я вот уже целую кучу встречал документации , которая не соответствовала действительности . так что мелкосовту не поверю пока не увижу в действии .
я вот уже целую кучу встречал документации , которая не соответствовала действительности . так что мелкосовту не поверю пока не увижу в действии .
Сделай это действие сам. Просто скомпили полноценное 64х-битное приложение ;)
и единственным способом выхода из ситуации является прогулка с программой в сторону нулевого уровня? если так то эту кашу я точно не съем :(
Больше трепачей слушайте :D
в 64битной винде для пользовательского процесса всё равно выделяется только 4 гига .
Т.е. ты заявляешь что Микрософт откровенно ВРЕТ своим пользователям размещая у себя на сайте ложную информацию о своих продуктах?
Запустил из интереса 7-zip бенчмарк на одном из своих серверов (сейчас он простаивает). Бенчмарк замечательно потребил 5ГБ памяти. ;) ОС Windows Server 2003 SP2 x64.
ну положим билли и компания каждый раз заявляют, что их следующий офис будет на 300% быстрее, надежней, что он наконец научиться с точностью профессора филолога проверять правописание, научиться приносить кофе, и возьмет на себя прочие функции секретутки, в том числе и те о которых вы подумали. так же каждый раз мелкомягкие заявляют, что следующая их форточка будет быстрее, защищенней, и вообще будет обладать искусственным интеллектом и будет исполнять все желания!!! и как бы ни чего, народ все еще верит!=)))
зы: сорри, не сдержался!
[/оффтоп]
хотел бы я посмотреть на испытательный стенд с сотнями терабайт оперативы )
многие люди врут ради гораздо более мелких доходов , чем получает микронанопикософт . "вы ещё верите рекламе ? тогда мы идем к вам !" )
Ubuntu Linux может адресовать 1ТБ озу. Кто-то это проверял или они тоже врут?
обычно есть разница между расчётными параметрами и действительностью из-за проектных ошибок и не отловленных багов . об этом всегда надо помнить .
зы. дай код для работы с массивом на 6-8 гигов - скомпилю я и топикстартер .
обычно есть разница между расчётными параметрами и действительностью из-за проектных ошибок и не отловленных багов . об этом всегда надо помнить .
Обчно есть разница между теоретическим пределом и практически достижимым. 10 лет назад 4ГБ оперативной памяти в одной машине казалось чем-то фантастическим - оборудование не позволяло.
зы. дай код для работы с массивом на 6-8 гигов - скомпилю я и топикстартер .