Можно ли добиться максимальной производительности при создании статических переменных?
======================================================================================

Почему некоторые люди делают:

```
<code>char baa(int x) {
    static char foo[] = " .. ";
    return foo[x ..];
}
</code>
```

вместо:

```
<code>char baa(int x) {
    char foo[] = " .. ";
    return foo[x ..];
}
</code>
```

выглядит очень распространенным в приложениях с исходными кодами Linux. Там разница в производительности? если да, может кто-нибудь объяснить, почему? Заранее спасибо.

per se, а скорее, чтобы уменьшить использование памяти. Тамis повышение производительности, но это (обычно) не основная причина, по которой вы видите подобный код.

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

Однако статические переменные хранятся либо в`.BSS` или же`.DATA` сегмент (неинициализированные явным образом статические переменные перейдут в`.BSS`статически инициализированные статические переменные перейдут в`.DATA`), со стека. Компилятор также может воспользоваться этим для выполнения определенных оптимизаций.



 что переменная не «освобождена», то есть она сохранит свое значение при последующих вызовах.
Это может привести к улучшению производительности в зависимости от алгоритма, но, конечно, само по себе это не улучшение производительности.



`static` просто поместит строку куда-нибудь в память во время компиляции, тогда как версия без`static` заставит функцию (каждый раз, когда она вызывается) выделять некоторое пространство в стеке и записывать строку в это пространство.

Версия с`static`, следовательно,

is likely to be quicker
may use less memory
will use less stack space (which on some systems is a scarce resource)
will play nicer with the cache (which isn't likely to be a big deal for a small string, but might be if `foo` is something bigger).


 в отличие от переменных в автоматическом хранилище, которые инициализируются каждый раз, статические переменные инициализируются только один раз, при первом запуске функции. Если`foo` являетсяnot написано, что других отличий нет. Если оно записано, изменения статических переменных сохраняются между вызовами, а изменения автоматических переменных теряются в следующий раз через функцию.



Firstly, the memory will be allocated in either bss or data segment instead of stack.

Secondly, it will be initialized for once only , not every time unlike other variables of 
function, which will surely create difference. 

Thirdly, it retains it's value b/w function calls.So depending on the situations you should 
use it.