Page 1 of 1

Ошибка "Memory is Full"

PostPosted: 11 Nov 2017, 10:53
by Елизавета
Всем привет! Написана программа для генерации и сбора данных. Разумеется имеет место несколько массивов, которые содержат большое количество данных (осциллограммы, оцифрованные конечные данные). Более того, на выходе программы записывается массив данных в файл, содержащий в себе зависимость сигнала одного канала АЦП от другого. Возникает ошибка "Memory is Full". И вот что странно: на более мощном компьютере при запуске .exe файла ошибки нет, но при запуске приложения со слабенького нетбука она возникает. В чем может быть подвох и в чем причина? Как узнать, какой тип переменных у меня формирует массив U8 или более громоздкий? Это ведь тоже может повлиять на возникновение ошибки? Или же дело не в моей программе, а в возможностях ПК? Помогите, пожалуйста, разобраться)))

Re: Ошибка "Memory is Full"

PostPosted: 11 Nov 2017, 14:17
by IvanLis
Елизавета wrote:Как узнать, какой тип переменных у меня формирует массив U8 или более громоздкий?

Размер данных для каждого типа известен: Numeric Data Types Table.
В таблице данные для одного элемента, соответственно для массива, можно умножать (размером поля где прописан размер массива можно пренебречь).

Re: Ошибка "Memory is Full"

PostPosted: 11 Nov 2017, 16:35
by dadreamer
Елизавета wrote:Как узнать, какой тип переменных у меня формирует массив U8 или более громоздкий?

Выведите размеры каждого массива (Array Size). Посмотрите, где сколько элементов. Если где-то их слишком много (скажем, больше миллиона), то надо подумать, что с этим делать.
От компьютера зависит. Например, на моем домашнем компе с 8 ГБ ОЗУ :labview: 2017 64-bit даёт спокойно создать 1-мерный массив U8 из MaxInt (т.е., 2147483647) элементов. Но, если я захочу создать 2-мерный массив U8 размерности MaxInt x MaxInt, то :labview: мне это не позволит - "Not enough memory to complete this operation", и далее "Memory is full". На более слабой машине эта граница будет ещё ниже. Разрядность :labview: и разрядность системы также влияют.

Re: Ошибка "Memory is Full"

PostPosted: 11 Nov 2017, 20:21
by Blackman
Выведите размеры каждого массива (Array Size). Посмотрите, где сколько элементов. Если где-то их слишком много (скажем, больше миллиона), то надо подумать, что с этим делать...

Беглый взгляд на BD дал следующие результаты:
-----------------------------------------------------------------------------------------------------
DAQmx Analog Output Task
Number of Channels = 2
Generate Mode = Finite (N Samples)
Number Samples to write = 10.000.000
Sample Rate = 100.000 Hz (100 kHz)
DAQmx Output Buffer Size = 10.000.000 x 8 x 2 = 160.000.000 bytes (~ 160 Mb)
---------------------------------------------------------------------------------------------------
DAQmx Analog Input Task
Number of Channels = 2
Generate Mode = Continuous Samples
Number Samples to read = 10.000.000
Sample Rate = 100.000 Hz (100 kHz)
DAQmx Input Buffer Size = 10.000.000 x 8 x 2 = 160.000.000 bytes (~ 160 Mb)
-----------------------------------------------------------------------------------------------------
= 360 Mb
Попытка создать Triangle Wave длинной 10^9 точек привела к полной блокировке системы WIN10 -x64 -4Г ОЗУ - 7Г Виртуальная - LV2016 (64) :cantbe: