Модераторы: xvr

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> нехватка оперативной памяти ? 
:(
    Опции темы
Remiznik
Дата 30.7.2009, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 379
Регистрация: 30.4.2005

Репутация: нет
Всего: 1



Нужно загрузить очень большой фале в ОП но её может не хватить как сделать чтоб программа не падала от нехватки ОП ?

У меня есть две идеи но как их реализовать не знаю !
1. Начать закружать ОП и если она кончиться то перехватить это исключение и обработать  его. 
2. Каким-то обзором определить количество свободной ОП до начала загрузки файла и уже там думать что с этим делать.

По 1 не знаю какое исключение генерируется и как его отловить. 
По 2 не знаю как определить кол-во свободной ОП.

Посоветуйте что делать, или может есть ешо какие идеи для предотвращения паления программы ! 
PM MAIL   Вверх
Sartorius
Дата 30.7.2009, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1568
Регистрация: 18.7.2006
Где: Ivory tower

Репутация: нет
Всего: 37



А вы про виртуальную память слышали? До вас уже обо всем позаботились...

ЗЫ Что то мне подсказывает, что вашу задачу можно решить без загрузки в память всего файла.

Это сообщение отредактировал(а) Sartorius - 30.7.2009, 14:41
PM MAIL ICQ   Вверх
azesmcar
Дата 30.7.2009, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 1
Всего: 211



Remiznik

Используй функцию mmap.
PM   Вверх
Cheloveck
Дата 30.7.2009, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1578
Регистрация: 26.7.2008
Где: Тула

Репутация: нет
Всего: 32



Цитата(Sartorius @  30.7.2009,  15:39 Найти цитируемый пост)
ЗЫ Что то мне подсказывает, что вашу задачу можно решить без загрузки в память всего файла.


Sartorius мне подсказывает, что то, что мне что-то подсказывает, что вашу задачу можно решить без загрузки всего файла в ОП, правильно. Я, вот сейчас работаю с файлами 100+ Mb и использую потоки.


--------------------
user posted image
PM Jabber   Вверх
Remiznik
Дата 1.8.2009, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 379
Регистрация: 30.4.2005

Репутация: нет
Всего: 1



azesmcar, спасибо за ссылку но както пока не разобрался как использовать эту функцию ... примера нет а по описанию мне както не вникнуть что она делает .

Cheloveck а можно поподробнее по потоки , как ты их используешь чтоб не загружать весь в фаел в ОП ?
PM MAIL   Вверх
azesmcar
Дата 1.8.2009, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 1
Всего: 211



Цитата(Remiznik @  1.8.2009,  15:07 Найти цитируемый пост)
azesmcar, спасибо за ссылку но както пока не разобрался как использовать эту функцию ... примера нет а по описанию мне както не вникнуть что она делает .

Что, примеров не нашел?
http://www.cs.purdue.edu/homes/fahmy/cs503/mmap.txt
http://www.linuxquestions.org/questions/pr...rial-cc-511265/
http://www.devshed.com/c/a/BrainDump/Using...vanced-File-IO/
http://publib.boulder.ibm.com/infocenter/i...=/apis/mmap.htm
http://www.ecst.csuchico.edu/~beej/guide/ipc/mmap.html

Добавлено через 57 секунд
Цитата(Remiznik @  1.8.2009,  15:07 Найти цитируемый пост)
что она делает

Написано же
Цитата

The mmap() function asks to map length bytes starting at offset offset from the file (or other object) specified by the file descriptor fd into memory

http://www.translate.ru
PM   Вверх
Remiznik
Дата 1.8.2009, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 379
Регистрация: 30.4.2005

Репутация: нет
Всего: 1



то есть в функцию передаём файл и она проверяет поместится он в ОП или нет ?


PM MAIL   Вверх
azesmcar
Дата 1.8.2009, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 1
Всего: 211



Цитата(Remiznik @  1.8.2009,  15:52 Найти цитируемый пост)
то есть в функцию передаём файл и она проверяет поместится он в ОП или нет ?

нет, проецирует файл в память.
PM   Вверх
Cheloveck
Дата 2.8.2009, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1578
Регистрация: 26.7.2008
Где: Тула

Репутация: нет
Всего: 32



Цитата(Remiznik @  1.8.2009,  16:07 Найти цитируемый пост)

Cheloveck а можно поподробнее по потоки , как ты их используешь чтоб не загружать весь в фаел в ОП ? 

Код


// Копирует всё содержимое input в output.
void copy_stream( std::ifstream & input, std::ofstream & output )
{
    if( !input.is_open() || input.eof() || !output.is_open() )
        return;

    std::string str;
    while( !input.eof() && std::getline( input, str ) )
    {
        output << str << std::endl;
    }
}

Вот кусок из одной из моих прог.


--------------------
user posted image
PM Jabber   Вверх
andrew_121
Дата 2.8.2009, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 3
Всего: 33



Cheloveck, Что-то я не вижу чтоб было указанно что данные только текстовые.

Добавлено через 6 минут и 26 секунд
Remiznik, Так задача собственно какая? Скопировать файл?
Если да, то тут:
http://forum.vingrad.ru/forum/topic-267913.html


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
LisAnd
Дата 3.8.2009, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 13.5.2009

Репутация: нет
Всего: нет



Отображаемая память рулитsmile
PM MAIL   Вверх
Remiznik
Дата 3.8.2009, 21:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 379
Регистрация: 30.4.2005

Репутация: нет
Всего: 1



задача в том что есть файл там данные записаны особенным обзором и их не просто нужно загрузить в память а в вектор но прежде чем загрузить в вектор нужно выделить под него память а если файл слишком большой выдать предупреждении !

Код

 struct mystruct
{
    int param1;
    int param2;
}

vector<mystruct> Data;

int size;           // количество данных 
Data.resize(size);


и мне нужно знать хватит ли места в ОП для этого вектора.
PM MAIL   Вверх
vinick
Дата 3.8.2009, 22:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 285
Регистрация: 9.6.2005

Репутация: 4
Всего: 22



Цитата(Remiznik @  3.8.2009,  21:19 Найти цитируемый пост)
и мне нужно знать хватит ли места в ОП для этого вектора. 

Можешь попробовать ловить std::bad_alloc из resize и SIGSEGV. resize вызывает констурторы для элементов, следовательно доступ к памяти будет, а значит либо исключение, либо сигнал выстрелят.

 Но лучше пересмотреть алгоритм. Что ты будешь делать если файл попадется такой, что со скрипом влезет в память, но ни на что другое памяти уже не останется? А что делать пользователю с твоим предупреждением? бежать в магазин за планкой памяти, за двумя или заказывать кластер на петабайт?
PM MAIL ICQ Jabber   Вверх
Remiznik
Дата 3.8.2009, 22:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 379
Регистрация: 30.4.2005

Репутация: нет
Всего: 1



да я понимаю что все данные загружать в ОП это абсурд ... но если файл не помешается в ОП то я применю алгоритм и буду выборочно загружать .... но если файл помешается то надо загрузить !
PM MAIL   Вверх
andrew_121
Дата 3.8.2009, 22:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 3
Всего: 33



Напиши свой объект вектор. В нем, вместо выделения памяти, используй проецирование файла в память.
Какие именно операции ты выполняешь с этим вектором?


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.0976 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.