Проблема с открытием файла большого размера

Работа с файлами и базами данных
Аватара пользователя
Konstantin Sumenko

Activity Bronze
expert
expert
Сообщения: 1439
Зарегистрирован: 17 июл 2008, 12:20
Награды: 2
Версия LabVIEW: 2010
Откуда: Moscow
Поблагодарили: 1 раз
Контактная информация:

Re: Проблема с открытием файла большого размера

Сообщение Konstantin Sumenko »

По-моему сам язык C имеет только одно ограничение на размер массива: индекс массива (его тип) должен быть целочисленным и беззнаковым- все. Остальное- особенности компилятора и ОС.
Pavel

Activity
developer
developer
Сообщения: 271
Зарегистрирован: 31 июл 2009, 08:07
Награды: 1
Версия LabVIEW: 8.5

Re: Проблема с открытием файла большого размера

Сообщение Pavel »

Crowbar писал(а):Остальное- особенности компилятора и ОС.
А как же LV'шный менеджер памяти?
Аватара пользователя
Konstantin Sumenko

Activity Bronze
expert
expert
Сообщения: 1439
Зарегистрирован: 17 июл 2008, 12:20
Награды: 2
Версия LabVIEW: 2010
Откуда: Moscow
Поблагодарили: 1 раз
Контактная информация:

Re: Проблема с открытием файла большого размера

Сообщение Konstantin Sumenko »

mzu2006 тут уже написал про одну из особенностей менеджера памяти: http://labviewportal.org/viewtopic.php? ... 949#p17526 Если есть смежные блоки памяти суммарно нужного размера- отлично (максимум два гига для 32 разрядной системы и соответственно LV), если смежных блоков нет- out of memory error. Иначе как было сказано и как правильно делать- бит данные на блоки. Еще одна особенность заключается в самом принципе dataflow: в создании копий данных при использовании определенных структур (циклы, графики, глобальные и локальные переменные и т.д.)...
Аватара пользователя
mzu2006

Professionalism Tutorials Black
doctor
doctor
Сообщения: 2456
Зарегистрирован: 16 авг 2008, 02:12
Награды: 3
Версия LabVIEW: 7.1 10 11 12
Откуда: St-Petersburg (RU), Phila, Boston, Washington DC
Контактная информация:

Re: Проблема с открытием файла большого размера

Сообщение mzu2006 »

toto писал(а):Интересно, а в СИ нет такого ограничения разве? Мои ощущения подсказывают, что эти ограничения связаны не с самим LV а с СИ, как основой на которой и LV написан, а может даже глубже - с ОС.
А про какой тип массива ты говоришь?

1. int a[2000]; - непрерывный кусок памяти фиксированного размера, расположенный в стеке (или в том месте где лежат глобальные данные).
2. int *a((int *)malloc(2000*sizeof(int))); непрерывный кусок памяти (почти)фиксированного размера в куче (если получится).
3. vector<int> a; - не обязательно непрерывный не фиксированного размера динамический массив в куче. При правильной реализации STL получится выделить столько, сколько есть памяти, несмотря на фрагменты.

LV массив - он гибрид 2 и 3.

На 32-битной системе можно добиться максимум 3Гб - при ключе /3GB в boot.ini и при установленном флаге на labview.exe. Другой вопрос стоит ли это делать.
Pavel

Activity
developer
developer
Сообщения: 271
Зарегистрирован: 31 июл 2009, 08:07
Награды: 1
Версия LabVIEW: 8.5

Re: Проблема с открытием файла большого размера

Сообщение Pavel »

Crowbar писал(а):mzu2006 тут уже написал про одну из особенностей менеджера памяти: http://labviewportal.org/viewtopic.php? ... 949#p17526 Если есть смежные блоки памяти суммарно нужного размера- отлично (максимум два гига для 32 разрядной системы и соответственно LV), если смежных блоков нет- out of memory error. Иначе как было сказано и как правильно делать- бит данные на блоки. Еще одна особенность заключается в самом принципе dataflow: в создании копий данных при использовании определенных структур (циклы, графики, глобальные и локальные переменные и т.д.)...
Есть еще одна особенность в 32 битной версии LV: в функции init array стоит ограничение на размерность массива в 1073741824 (0x40000000) байт и число элементов массива (суммарное по всем измерениям) не должно превышать 2 в степени 31 (последнее утверждение поставлю под вопросом). Как можно проверить (условно по времени): задать размер массива больше чем эти значения. Тогда, по идее, функции init array даже не будет тужиться что бы создать массив такого размера (сам я, правда, не проверял). Если же эти условия удовлетворены функция по честному попытается создать массив даже если он не влезает в свободное место памяти, при этом оставит обработку ошибок на менеджер памяти.
Araks
interested
interested
Сообщения: 6
Зарегистрирован: 09 сен 2009, 16:04
Версия LabVIEW: 8.5
Контактная информация:

Re: Проблема с открытием файла большого размера

Сообщение Araks »

eg писал(а):Чтение по частям было бы самое правильное. При чтении файла используй Set File Position, это что то вроде курсора-метки.
Ограничения нет, кроме размера RAM конечно :nono:
Огромное спасибо. Это подошло. А на запись файла, оказывается, ограничений нет, я писал и до 4 ГБ :) Всем большое спасибо.
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Сохранение данных»