Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Виртуальная память

48K
07 апреля 2010 года
CATERPILLAR
36 / / 07.04.2010
Всем привет, пишу программу копирования файлов, и требование к ней чтобы файлы были забиты все в буфер оперативной памяти, размер этих файлов может быть до 16 Гб но на моей домашней машине всего 4 (на работе будут все 16). Я столкнулся с проблемой нехватки оперативной памяти выскакивает ошибка что возникло необработанное исключение. Нужно чтобы при нехватке файлы записывались в виртуалку, наверное, хотя судя по диспетчеру задач они сами туду текут, объясните плз пишу на VS2008C++,.NET2.0,WinAPI

Скрин ошибки
5
07 апреля 2010 года
hardcase
4.5K / / 09.08.2005
Какой смысл держать ВСЕ файлы в памяти? :eek:
48K
07 апреля 2010 года
CATERPILLAR
36 / / 07.04.2010
Запись будет на кучу дисков, около 400 всего, по 20 за партию примерно, винчестер нужной скорости не обеспечит, кстати еще вопросик попроще если не сложно)
WIN32_FIND_DATA FileData.nFileSizeLow не правельно размер файлов более 2Гб отображает, хотя в свойствах проекта поставил "Поддерживаются адреса, большие, чем 2 гигабайта (/LARGEADDRESSAWARE)"
5
07 апреля 2010 года
hardcase
4.5K / / 09.08.2005
Цитата: CATERPILLAR
Запись будет на кучу дисков, около 400 всего, по 20 за партию примерно

Отсюда делаем вывод - писать на них параллельно, данные с исходного подкачивать по мере надобности, записанные данные из памяти выкидывать.

48K
07 апреля 2010 года
CATERPILLAR
36 / / 07.04.2010
ага такой способ в моей программе уже реализован, но требуется, и способ описанный выше, для смены носителей по мере записи, т.к. их скорость может быть различной, и ждать один медленный смысла нету. Прежде чем задать вопрос на форуме я 32 раза подумал, и 64 раза загуглил))
5
07 апреля 2010 года
hardcase
4.5K / / 09.08.2005
Цитата: CATERPILLAR
ага такой способ в моей программе уже реализован, но требуется, и способ описанный выше, для смены носителей по мере записи, т.к. их скорость может быть различной, и ждать один медленный смысла нету.

А я не говорил что нужно ждать. Я говорил об освобождении памяти по мере записи данных. Тот кто записывает быстрее будет проталкивать в буфер все новые данные, тот кто записывает медленнее - будет задерживать данные в памяти.

48K
07 апреля 2010 года
CATERPILLAR
36 / / 07.04.2010
а зачем лишний раз винчестер нагружать?
тем более допустим первый записан на 60%, второй на 100%
вставляю следующий диск во второй слот, пока первый не записался, он занимает 40% места в оперативке(конечно если её объем равен емкости диска) а второй пока первый не записался, будет загружать буфер. Так вот это если 2 диска, а если 20 и если их объем 16 Гб??? очень велика вероятность переполнения памяти, а это критический сбой, и партию будет необходимо дозаписывать, за такую программу мне спасибо не скажут))) выигрыша от этого будет не достаточно, проще через оперативку
5
07 апреля 2010 года
hardcase
4.5K / / 09.08.2005
Цитата: CATERPILLAR

очень велика вероятность переполнения памяти, а это критический сбой

Подкачку данных в память всегда можно приостановить и очередь на запись держать в размерах физической памяти. Если все данные умещаются в памяти - замечательно, будут минимизированы обращения к исходному носителю. Если же нет - приходится выбрасывать часть данных из памяти, ваша задача в некотором смысле сродни алгоритмам подкачки, которые реализует ОС (по сути тоже самое, редкоиспользуемые страницы памяти она перемещает на жесткий диск).

Цитата: CATERPILLAR
проще через оперативку

Значит нужно в программе указывать требование - много-много Гб физической озу. :) И ограничивать размер записи в таком режиме только размером оперативной памяти.


А вообще в вашем случае может помочь SSD накопитель в качестве исходного носителя - у него него очень быстрый индексный доступ.

48K
07 апреля 2010 года
CATERPILLAR
36 / / 07.04.2010
да, конечно, но ведь эта программа будет работать на нескольких машинах с разными характеристиками на все ставить SSD дорогое удовольствие, может можно как то избежать данной ошибки без потери производительности? думаю грамотно обработать это исключение помогло бы задействовать виртуальную память на уровне системмы и решить проблемму
5
07 апреля 2010 года
hardcase
4.5K / / 09.08.2005
Цитата: CATERPILLAR
думаю грамотно обработать это исключение помогло бы задействовать виртуальную память на уровне системмы и решить проблемму


Примерный алгоритм работы я уже обрисовал. В качестве инструмента реализации подкачки с диска я бы попробовал использовать File Map, правда я не знаю как поведет он себя при копировании действительно больших файлов - надо проверять.

48K
07 апреля 2010 года
CATERPILLAR
36 / / 07.04.2010
спасибо за наводку, буду пытаться, вечером отпишусь после академии
399
07 апреля 2010 года
KIV
432 / / 20.01.2009
Отображаемые файлы - тоже самое, что и файл подкачки. Только вы задаёте его имя и делаете некоторые другие подготовительные операции. Скорость для файла подкачки и отображаемого файла практически одинаковая.
48K
07 апреля 2010 года
CATERPILLAR
36 / / 07.04.2010
о ужас какие умники на форуме сидят, спросил одно, мне давай мозга <censored>, не ужели так сложно на вопрос ответить, кинуть ссылку если знаешь, а если не знаешь то зачем переубеждать, я же по русски написал что кучу раз обдумал как мне лучше поступить, знаю я все про файл подкачки, и как можно еще это реализовать, я что перевелся из физкультурного в IT вуз? вроде писал адекватно и как можно вежливее, но не могу уже, у меня мозги наверное быстрее работают чем тут коменты пишут, единственное, не знаю как обрабатывать исключения, это я просто придумать не могу, по этому и спрашиваю еще раз:
Как обработать исключение переполнения оперативной памяти чтобы задействовать нормально виртуалку? Ответьте пожалуйста если не сложно!
5
07 апреля 2010 года
hardcase
4.5K / / 09.08.2005
Цитата: CATERPILLAR
Как обработать исключение переполнения оперативной памяти чтобы задействовать нормально виртуалку? Ответьте пожалуйста если не сложно!


Не пытаться выделять память если ее элементарно нету в наличии :)
Можно поступить иначе. В начале работы программы занять все возможное пространство и работать с ним - это безопаснее.

14
08 апреля 2010 года
Phodopus
3.3K / / 19.06.2008
Цитата: CATERPILLAR
о ужас какие умники на форуме сидят, спросил одно, мне давай мозга <censored>, не ужели так сложно на вопрос ответить, кинуть ссылку если знаешь


а это.. надо морально готовиться перед походом на форум! как будто это свидание :D

Цитата: CATERPILLAR
а если не знаешь то зачем переубеждать


интересно, кто тут тебя переубеждал, чего-то я не увидел? - цитируй хоть!

Цитата: CATERPILLAR
знаю я все про файл подкачки


напиши книгу, заработаешь кучу бабла, даже я куплю почитать

Цитата: CATERPILLAR
я что перевелся из физкультурного в IT вуз?


см.ниже

Цитата: CATERPILLAR

у меня мозги наверное быстрее работают чем тут коменты пишут,


я плакалъ, но будем надеяться что это так

Цитата: CATERPILLAR

Как обработать исключение переполнения оперативной памяти чтобы задействовать нормально виртуалку?


тут вспоминается про физкультурный.. ты уж разберись в понятиях - что такое виртуалка, что такое адресное пространство, и где в них у тебя оперативка. а то неоднозначное впечатление складывается :cool:

48K
10 апреля 2010 года
CATERPILLAR
36 / / 07.04.2010
знаю я одного такого умника, он помощником менеджера на фирме у нас работает, ему кроме ксерокса ничего не доверяют
14
12 апреля 2010 года
Phodopus
3.3K / / 19.06.2008
кстати забыл...
Цитата: CATERPILLAR

WIN32_FIND_DATA FileData.nFileSizeLow не правельно размер файлов более 2Гб отображает


структуру хоть глянь целиком

Цитата: CATERPILLAR

хотя в свойствах проекта поставил "Поддерживаются адреса, большие, чем 2 гигабайта (/LARGEADDRESSAWARE)"


вообще не связанные понятия. почитай справку по параметру

48K
13 апреля 2010 года
CATERPILLAR
36 / / 07.04.2010
фуф наконец то обработал исключение, теперь памятьвыделяется, хотя не более 4 Гб, не понимаю...
Код:
Ukaz=new myOPERATION[1];
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 всегда в моей программе равнялось нулю. хз...
48K
13 апреля 2010 года
CATERPILLAR
36 / / 07.04.2010
При первом проходе цикла:
 
Код:
mySize{0}+=(unsigned long)FileData.nFileSizeLow{2205313024};
{в фигурных скобках значение переменных.}
При втором проходе:
 
Код:
mySize{2205313024}+=(unsigned long)FileData.nFileSizeLow{2204606464};

А при третьем
 
Код:
mySize{114952192}+=(unsigned long)FileData.nFileSizeLow{2202947584};
видно что mySize после прибавления уменьшилось хотя других операций с этой переменной я не производил
252
13 апреля 2010 года
koderAlex
1.4K / / 07.09.2005
на х86 процессорах адресное пространство процесса не превышает 4 гигов . причём в винде старшие 2 гига отдаются для системы .
тебе выше уже намекали что нечего страдать ерундой . для этих намёков были вполне объективные причины . )
48K
13 апреля 2010 года
CATERPILLAR
36 / / 07.04.2010
у меня на материнке стоит 64 битный 2-х ядерник и винда 7 64bit
48K
13 апреля 2010 года
CATERPILLAR
36 / / 07.04.2010
Системма у меня занимает 800мб с вижуал студией, памяти для прилажения моего выделяется 3.9 Гб(включая виртуалку как я понял) у меня стоит 4Гб, просто не понимаю вашей логики, возможно ли дело в компиляторе? переменная "unsigned long" тоже криво работает из за того что не 64бит ???
252
14 апреля 2010 года
koderAlex
1.4K / / 07.09.2005
Цитата: CATERPILLAR
у меня на материнке стоит 64 битный 2-х ядерник и винда 7 64bit



ну и что что стоит )
в 64битной винде для пользовательского процесса всё равно выделяется только 4 гига .

лучший выход для вас - поставить флешку на 128 гигов и использовать её как буфер .
а для безопасности флешку скрыть от пользователей . )

5
14 апреля 2010 года
hardcase
4.5K / / 09.08.2005
Цитата: koderAlex
ну и что что стоит )
в 64битной винде для пользовательского процесса всё равно выделяется только 4 гига .

Дану? Для 32-битного процесса я еще могу понять, но не для 64-битного (какой иначе смысл в удвоенной разрядности).

252
14 апреля 2010 года
koderAlex
1.4K / / 07.09.2005
когда-то Билл Гейтс утверждал достаточность 640кб для любых целей любого пользователя . )
сейчас для винды считают достаточным 4 гига .
64 битную адресацию использует система .
5
14 апреля 2010 года
hardcase
4.5K / / 09.08.2005
Цитата: koderAlex
когда-то Билл Гейтс утверждал достаточность 640кб для любых целей любого пользователя . )


Он этого не утверждал. ;)

Цитата: koderAlex
сейчас для винды считают достаточным 4 гига .
64 битную адресацию использует система .


Снова мимо.

252
14 апреля 2010 года
koderAlex
1.4K / / 07.09.2005
я не верю словам таких товарищей как Билл . тем более если у них есть причины лгать .

если ты такой умный , то помоги топикстартеру . )
я вот уже целую кучу встречал документации , которая не соответствовала действительности . так что мелкосовту не поверю пока не увижу в действии .
14
14 апреля 2010 года
Phodopus
3.3K / / 19.06.2008
Цитата: koderAlex

я вот уже целую кучу встречал документации , которая не соответствовала действительности . так что мелкосовту не поверю пока не увижу в действии .


Сделай это действие сам. Просто скомпили полноценное 64х-битное приложение ;)

48K
14 апреля 2010 года
CATERPILLAR
36 / / 07.04.2010
вот облом, только обрадовался что с этой кашей разобрался а тут такие ограничения...
и единственным способом выхода из ситуации является прогулка с программой в сторону нулевого уровня? если так то эту кашу я точно не съем :(
5
14 апреля 2010 года
hardcase
4.5K / / 09.08.2005
Цитата: CATERPILLAR
вот облом, только обрадовался что с этой кашей разобрался а тут такие ограничения...


Больше трепачей слушайте :D

Цитата: koderAlex
ну и что что стоит )
в 64битной винде для пользовательского процесса всё равно выделяется только 4 гига .


Т.е. ты заявляешь что Микрософт откровенно ВРЕТ своим пользователям размещая у себя на сайте ложную информацию о своих продуктах?
Запустил из интереса 7-zip бенчмарк на одном из своих серверов (сейчас он простаивает). Бенчмарк замечательно потребил 5ГБ памяти. ;) ОС Windows Server 2003 SP2 x64.

307
14 апреля 2010 года
Artem_3A
863 / / 11.04.2008
[оффтоп]

Цитата: hardcase
ты заявляешь что Микрософт откровенно ВРЕТ своим пользователям размещая у себя на сайте ложную информацию о своих продуктах?



ну положим билли и компания каждый раз заявляют, что их следующий офис будет на 300% быстрее, надежней, что он наконец научиться с точностью профессора филолога проверять правописание, научиться приносить кофе, и возьмет на себя прочие функции секретутки, в том числе и те о которых вы подумали. так же каждый раз мелкомягкие заявляют, что следующая их форточка будет быстрее, защищенней, и вообще будет обладать искусственным интеллектом и будет исполнять все желания!!! и как бы ни чего, народ все еще верит!=)))

зы: сорри, не сдержался!

[/оффтоп]

252
15 апреля 2010 года
koderAlex
1.4K / / 07.09.2005
а кто проверял эти заявленные параметры ?
хотел бы я посмотреть на испытательный стенд с сотнями терабайт оперативы )

многие люди врут ради гораздо более мелких доходов , чем получает микронанопикософт . "вы ещё верите рекламе ? тогда мы идем к вам !" )
5
15 апреля 2010 года
hardcase
4.5K / / 09.08.2005
Цитата: koderAlex
а кто проверял эти заявленные параметры ?

Ubuntu Linux может адресовать 1ТБ озу. Кто-то это проверял или они тоже врут?

252
15 апреля 2010 года
koderAlex
1.4K / / 07.09.2005
может и не врут .
обычно есть разница между расчётными параметрами и действительностью из-за проектных ошибок и не отловленных багов . об этом всегда надо помнить .

зы. дай код для работы с массивом на 6-8 гигов - скомпилю я и топикстартер .
5
15 апреля 2010 года
hardcase
4.5K / / 09.08.2005
Цитата: koderAlex
может и не врут .
обычно есть разница между расчётными параметрами и действительностью из-за проектных ошибок и не отловленных багов . об этом всегда надо помнить .

Обчно есть разница между теоретическим пределом и практически достижимым. 10 лет назад 4ГБ оперативной памяти в одной машине казалось чем-то фантастическим - оборудование не позволяло.

Цитата: koderAlex

зы. дай код для работы с массивом на 6-8 гигов - скомпилю я и топикстартер .


http://7-zip.org/

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог