Выход за пределы массива. Либо, если в Amount уже учтён (размер - 1), то никакой разницы быть не должно от этого: for (int i = Amount - 1; i >= 0; i--)
Статическая переменная, объявленная внутри метода класса, является статической переменной самого класса.
class A {
void foo() {
staticint i;
i++;
Print(i);
}
public:
A(){foo();};
} o1, o2, o3;
voidOnStart() {
}
результат 1
2
3
Не то, чтобы особенность. Проверил, на С++ так же. И вроде как бы логично все. Но я лично этого не знал. Поэтому по привычке в методах класса часто использовал статические переменные, делая трудноуловимые ошибки(когда объектов класса несколько).
Думаю, оправдано. Но, да интересно бы замерить. Вдруг доступ к глобальной переменной происходит дольше, чем выделение новой памяти.
Тут от многих факторов зависеть будет.
Вероятность нахождения стека в кэше процессора выше, чем сегментов .data и .bss, просто, исходя из того, что со стеком постоянно операции происходят.
Если структура, выделяемая на стеке, не великая или используются только отдельные поля, то при оптимизациях, компилятор вообще память на стеке не выделяет, а обходится регистрами.
Отсюда вывод: не используйте static вместо local storage в вышеприведенном контексте, лучше точно не будет, а вот хуже - почти наверняка.
PS. если в том примере убрать static, то еще надо и инициализацию структуры убрать, что бы процессорное время нее не тратить, она в SymbolInfoTick будет инициализирована.
Вероятность нахождения стека в кэше процессора выше, чем сегментов .data и .bss, просто, исходя из того, что со стеком постоянно операции происходят.
Если структура, выделяемая на стеке, не великая или используются только отдельные поля, то при оптимизациях, компилятор вообще память на стеке не выделяет, а обходится регистрами.
Отсюда вывод: не используйте static вместо local storage в вышеприведенном контексте, лучше точно не будет, а вот хуже - почти наверняка.
PS. если в том примере убрать static, то еще надо и инициализацию структуры убрать, что бы процессорное время нее не тратить, она в SymbolInfoTick будет инициализирована.
Стек с большей вероятностью окажется в кэше процессора, чем сегменты .data и .bss, просто исходя из того, что со стеком постоянно происходят операции.
Если структура, выделяемая на стеке, невелика или используются только отдельные поля, то при оптимизации компилятор вообще не выделяет память на стек, а обходится регистрами.
Отсюда вывод: не используйте статическое вместо локального хранилища в указанном контексте, лучше не будет, а вот хуже - почти наверняка.
PS. Если вы уберете static в этом примере, то уберете и инициализацию структуры, чтобы не тратить процессорное время, она будет инициализироваться в SymbolInfoTick.
Откуда вы знаете, что она будет инициализирована? Разве она не будет просто заполнена значениями? Или вы подразумеваете это под словом "инициализируется".
А такой вариант?
Выход за пределы массива. Либо, если в Amount уже учтён (размер - 1), то никакой разницы быть не должно от этого: for (int i = Amount - 1; i >= 0; i--)
А такой вариант?
Вставьте свой вариант сюда и сравните.
Статическая переменная, объявленная внутри метода класса, является статической переменной самого класса.
результат
1
2
3
Не то, чтобы особенность. Проверил, на С++ так же. И вроде как бы логично все. Но я лично этого не знал. Поэтому по привычке в методах класса часто использовал статические переменные, делая трудноуловимые ошибки(когда объектов класса несколько).
Статическая переменная, объявленная внутри метода класса, является статической переменной самого класса.
Использую для скорости, чтобы не выделять память на каждом вызове. Не замерял, правда. Возможно, самообман.
Думаю, оправдано. Но, да интересно бы замерить. Вдруг доступ к глобальной переменной происходит дольше, чем выделение новой памяти.
Думаю, оправдано. Но, да интересно бы замерить. Вдруг доступ к глобальной переменной происходит дольше, чем выделение новой памяти.
Тут от многих факторов зависеть будет.
Отсюда вывод: не используйте static вместо local storage в вышеприведенном контексте, лучше точно не будет, а вот хуже - почти наверняка.
PS. если в том примере убрать static, то еще надо и инициализацию структуры убрать, что бы процессорное время нее не тратить, она в SymbolInfoTick будет инициализирована.
Тут от многих факторов зависеть будет.
Отсюда вывод: не используйте static вместо local storage в вышеприведенном контексте, лучше точно не будет, а вот хуже - почти наверняка.
PS. если в том примере убрать static, то еще надо и инициализацию структуры убрать, что бы процессорное время нее не тратить, она в SymbolInfoTick будет инициализирована.
Я это вполне допускаю.
Это зависит от многих факторов.
Отсюда вывод: не используйте статическое вместо локального хранилища в указанном контексте, лучше не будет, а вот хуже - почти наверняка.
PS. Если вы уберете static в этом примере, то уберете и инициализацию структуры, чтобы не тратить процессорное время, она будет инициализироваться в SymbolInfoTick.
Попробовал.
Результат.
Честно говоря, не понимаю, почему во второй строке получается ноль при отсутствии инициализации.