静态数组来自 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){
//...
}
它们可以隐式转换为数组的切片(或使用切片运算符显式转换[]),因此您可以将它们与普通动态数组几乎互换使用