Проблема с открытием файла большого размера
-
Konstantin Sumenko
- expert
- Сообщения: 1439
- Зарегистрирован: 17 июл 2008, 12:20
- Награды: 2
- Версия LabVIEW: 2010
- Откуда: Moscow
- Поблагодарили: 1 раз
- Контактная информация:
Re: Проблема с открытием файла большого размера
По-моему сам язык C имеет только одно ограничение на размер массива: индекс массива (его тип) должен быть целочисленным и беззнаковым- все. Остальное- особенности компилятора и ОС.
Re: Проблема с открытием файла большого размера
А как же LV'шный менеджер памяти?Crowbar писал(а):Остальное- особенности компилятора и ОС.
-
Konstantin Sumenko
- expert
- Сообщения: 1439
- Зарегистрирован: 17 июл 2008, 12:20
- Награды: 2
- Версия LabVIEW: 2010
- Откуда: Moscow
- Поблагодарили: 1 раз
- Контактная информация:
Re: Проблема с открытием файла большого размера
mzu2006 тут уже написал про одну из особенностей менеджера памяти: http://labviewportal.org/viewtopic.php? ... 949#p17526 Если есть смежные блоки памяти суммарно нужного размера- отлично (максимум два гига для 32 разрядной системы и соответственно LV), если смежных блоков нет- out of memory error. Иначе как было сказано и как правильно делать- бит данные на блоки. Еще одна особенность заключается в самом принципе dataflow: в создании копий данных при использовании определенных структур (циклы, графики, глобальные и локальные переменные и т.д.)...
-
mzu2006
- doctor
- Сообщения: 2456
- Зарегистрирован: 16 авг 2008, 02:12
- Награды: 3
- Версия LabVIEW: 7.1 10 11 12
- Откуда: St-Petersburg (RU), Phila, Boston, Washington DC
- Контактная информация:
Re: Проблема с открытием файла большого размера
А про какой тип массива ты говоришь?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. Другой вопрос стоит ли это делать.
Правила форума (Forum rules in Russian)
rm -rf /mnt/windows
rm -rf /mnt/windows
Re: Проблема с открытием файла большого размера
Есть еще одна особенность в 32 битной версии LV: в функции init array стоит ограничение на размерность массива в 1073741824 (0x40000000) байт и число элементов массива (суммарное по всем измерениям) не должно превышать 2 в степени 31 (последнее утверждение поставлю под вопросом). Как можно проверить (условно по времени): задать размер массива больше чем эти значения. Тогда, по идее, функции init array даже не будет тужиться что бы создать массив такого размера (сам я, правда, не проверял). Если же эти условия удовлетворены функция по честному попытается создать массив даже если он не влезает в свободное место памяти, при этом оставит обработку ошибок на менеджер памяти.Crowbar писал(а):mzu2006 тут уже написал про одну из особенностей менеджера памяти: http://labviewportal.org/viewtopic.php? ... 949#p17526 Если есть смежные блоки памяти суммарно нужного размера- отлично (максимум два гига для 32 разрядной системы и соответственно LV), если смежных блоков нет- out of memory error. Иначе как было сказано и как правильно делать- бит данные на блоки. Еще одна особенность заключается в самом принципе dataflow: в создании копий данных при использовании определенных структур (циклы, графики, глобальные и локальные переменные и т.д.)...
-
- interested
- Сообщения: 6
- Зарегистрирован: 09 сен 2009, 16:04
- Версия LabVIEW: 8.5
- Контактная информация:
Re: Проблема с открытием файла большого размера
Огромное спасибо. Это подошло. А на запись файла, оказывается, ограничений нет, я писал и до 4 ГБ :) Всем большое спасибо.eg писал(а):Чтение по частям было бы самое правильное. При чтении файла используй Set File Position, это что то вроде курсора-метки.
Ограничения нет, кроме размера RAM конечно
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение