статические массивы родом из языка C, где вызовы (медленные) alloc
были крайне нежелательны из-за утечек памяти (когда вы забыли освободить выделенный массив), двойного освобождения (в результате ...), висячие указатели (все опасности ручного управления памятью, которых можно избежать с помощью GC)
это означало, что такие конструкции, как
int foo(char* inp){
char[80] buff;
strcpy(inp,buff);//don't do this this is a invite for a buffer overflow
//...
return 1;
}
были распространены вместо вызовов alloc / free, когда выНеобходимо убедиться, что все выделенное вами содержимое было освобождено ровно один раз в ходе выполнения программы
. Технически вы МОЖЕТЕ динамически размещать в стеке (если хотите, используя сборку), однако это может вызвать некоторые проблемы с кодом в качестведлина будет известна только во время выполнения и уменьшит возможную оптимизацию, которую может применить компилятор (например, развернув итерацию над ней)
статические массивы в основном используются для буферов из-за быстрого выделения, возможного в стеке
ubyte[1024] buff=void;//assigning void avoids the initializer for each element cause we are writing to it first thing anyway
ubyte[] b;
while((b=f.rawRead(buff[])).length>0){
//...
}
они могут неявно преобразовывать в фрагмент массива (или eявно с оператором среза []
), чтобы вы могли использовать их почти взаимозаменяемо с обычными динамическими массивами