2013-06-14 3 views
-1

У меня есть приложение реального времени, которое генерирует некоторые значения для обработки. В одной из функций, которые я использую, я объявляю каждый раз, а не глобальные функций, что следует:Отсутствие памяти для адресов массивов

#define BUFFER 25 
double A[BUFFER]; 
double B[BUFFER]; 
double C[BUFFER]; 
double TOTAL[BUFFER]; 
double ERRORS[BUFFER]; 

Но, похоже, что это распределение некоторых указателей/адрес для всех значений массива не избавившись от них, как только их лечение будет завершено.

Если я считаю, что проект использует функцию, которая содержит вышеуказанные заявления, и мой проект обновляет новые значения каждую секунду, в течение 30 минут: таким образом, 25 * 5 * 60 * 30 = 225K бесполезные воспоминания

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

+3

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

+0

@ Angew Как это сделать? –

+0

Язык так говорит. Кому вам нужно это доказать? –

ответ

2

Поскольку они выделены в стеке, они будут удалены после того, как ваша функция существует.

Если вы обеспокоены этим создание/уничтожение происходит каждый раз, когда вы используете функцию, то сделать это в вашей функции вместо:

static double A[BUFFER]; 
static double B[BUFFER]; 
static double C[BUFFER]; 
static double TOTAL[BUFFER]; 
static double ERRORS[BUFFER]; 

Это не очень хорошая практика программирования (для начала крайне одно- threaded!), но это будет означать, что массивы создаются только один раз и уничтожаются после выхода вашей программы.

Но, вернувшись к вашей проблеме, я действительно не вижу, как это может быть причиной любых проблем с памятью, которые у вас есть: сумма, которую вы потребляете, крошечная.

0

Я предлагаю, чтобы, если пять массивов из пяти двойников вызывают нехватку памяти, вы используете машину без большой памяти. Альтернативно, это может подтолкнуть вас к краю, потому что что-то еще использует всю память. Это ваша программа? Если да, профайл.

Смежные вопросы