Замена глобальной переменной функцией

 

Вопрос: что работает надежнее и более ресурсоемко?

Например, объявление глобальной переменной

int Parameter;

или функция

int Parameter_f(int i, bool check)
{
   static int Parameter;
  
   if(check)
      Parameter+=i; // изменение переменной
   else
      Parameter=i;  // инициализация переменной
   
   return(Parameter);
} 
 

Моё мнение:

- надёжность одинаковая

- функция сжирает памяти больше

- обращение к функции работает медленнее

 
KimIV писал(а) >>

Моё мнение:

- надёжность одинаковая

- функция сжирает памяти больше

- обращение к функции работает медленнее

Если изменение глобальной переменной вызывает зависание терминала, то в чем причина такого зависания?

Разумное объяснение не правильное распределение памяти в терминале... С функцией такого не происходит... Я так думаю и надеюсь :)

Смотри здесь

 
может быть в этом что то есть,
было такое:
советник перестает торговать после 17 -27 сделок (например), очевидно память портилась,
действительно похоже на переменные глобальной видимости
Однако, это не ошибка а некий баг, то он есть то его нет, и от чего зависит непонятно.
 
kharko писал(а) >>

Если изменение глобальной переменной вызывает зависание терминала, то в чем причина такого зависания?

Разумное объяснение не правильное распределение памяти в терминале... С функцией такого не происходит... Я так думаю и надеюсь :)

Смотри здесь

Это вряд ли. Простое изменение значения глобальной переменной к зависанию не приводит. Скорее проблема в алгоритме. Например, нужно проследить, не вызывают ли Ваши функции друг друга.

Для поиска подобных ошибок обычно используется простой метод: отсекается любой "лишний" код до тех пор, пока проблема не локализуется.

 
SK. писал(а) >>

Это вряд ли. Простое изменение значения глобальной переменной к зависанию не приводит. Скорее проблема в алгоритме. Например, нужно проследить, не вызывают ли Ваши функции друг друга.

Для поиска подобных ошибок обычно используется простой метод: отсекается любой "лишний" код до тех пор, пока проблема не локализуется.

Именно отсеканием "лишнего" кода я получил точку зависания.... При изменении значения глобальной переменной терминал зависает... Заменил переменную функцией....

Результат тотже, зависает... Но... функция, заменяющая переменную, отрабатывается до выхода и... зацикливается... т.е. не может передать значение...

В чем причина, не пойму?.

 
Замена глобальных переменых функциями делает блоки программы универсальными, независимыми от конкретного названия переменной.... Набор таких программ своебразный конструктор, который превратит написание советников в собирание "кубиков" в единое целое.....