Статическое целое число в методе класса показывает неожиданное поведение

Рассмотрим следующий код:

class my_class;

  // *** constructor
  function new(string name = "");
    super.new(name);
  endfunction

  // ** my_function
  function void my_function();
    static int my_static_int = 0;
    my_static_int++;
    $display("my_static_int = %0d", my_static_int);
  endfunction

endclass

В моем коде предположим, что у меня есть последовательность с телом -

// ** body
task body();

  my_class my_class_A = new;
  my_class_A.my_function();

endtask

Моя проблема в том, что если бы я дважды вызывал body из своего теста, во второй раз my_static_int имел значение 2 вместо того, что я ожидал, которое равно 1.

Поскольку my_class_A уничтожается при каждом запуске тела (я проверяю это с помощью %p), не должен ли последующий запуск совершенно другого объекта my_class снова печатать значение 1

Может быть, здесь не хватает моего понимания. Любая помощь приветствуется


person noobuntu    schedule 12.09.2017    source источник


Ответы (1)


Переменная static означает, что существует только одна копия переменной и одна инициализация этой переменной до времени 0. Без ключевого слова static это была бы автоматическая переменная, которая выделяется и инициализируется каждый раз, когда вызывается ваша функция.

Если вам нужна переменная, которая инициализируется каждый раз при создании объекта, просто объявите ее как переменную-член класса.

person dave_59    schedule 12.09.2017
comment
Я сделал это переменной класса, что я обычно и делаю (я думал, что попробую что-то другое). Отличается ли это поведение от других языков OO? Я предполагал, что у каждого объекта класса будет своя копия статической переменной. - person noobuntu; 13.09.2017
comment
Поведение статической переменной класса SV такое же, как в Java и C++. - person dave_59; 13.09.2017