2014-01-21 4 views
1

В моей функции (или задаче) у меня есть константная строка, которая используется только внутри этого метода.Лучший способ определить константу в области функций/задач

Каков наилучший способ определить его (для исполнения):

  1. const static string stuff = "stuff";
  2. const string stuff = "stuff";
  3. static string stuff = "stuff";
  4. string stuff = "stuff";

Пример на EDA Playground: http://www.edaplayground.com/s/4/1090

+1

+1 для введения edaplayground для меня! – Ari

ответ

1
  • const помешает пишет будущее, IEEE std 1800-2012 § 6.20.6 «Const константа» состояние «... константные может быть установлены в процессе моделирования ...» что говорит о том, что до торгового автомата, чтобы решить, если надо будь то оптимизация производительности.
  • static помещает переменную в общую память. Это может помочь или повредить производительность в зависимости от сценария моделирования. Фактическое влияние производительности - симулятор, поэтому вам нужно будет запустить свои собственные тесты. IEEE std 1800-2012 § 6.21 «Объем и срок службы» для большего количества.

Для небольшого проекта воздействие на производительность будет незначительным. Для больших проектов производительность должна быть разделена на категории: использование памяти и время доступа к памяти. static переменные могут иметь компромисс меньшего объема памяти (разделяемая память) и более длительное время поиска (адрес памяти статической переменной может быть далек для остальных данных объекта). const вряд ли добавит отрицательную производительность.

Самый простой способ получить некоторые базовые данные о производительности - завершить моделирование с помощью $finish(2). См. IEEE std 1800-2012 Таблица 20-1-Диагностика для $ finish. Это сообщит о времени моделирования, местоположении и статистике памяти и времени процессора, используемых в симуляции, если имитатор соответствует стандарту.

С предоставленным example с использованием ModelSim 10.1d все комбинации сообщили о том же объеме использования памяти. Время выполнения было вызвано только количеством вызовов методом печати, а не атрибутом const/static.

Если бы я должен был догадаться, производительность будет (заказывается лучше к худшему):

  1. const string в static method
  2. string в static методом
  3. const static string
  4. static string
  5. const string
  6. string
Смежные вопросы