推荐答案
unsafe void Example() { int* block = stackalloc int[100]; for (int i = 0; i < 100; i++) { block[i] = i; } }
本题详细解读
什么是 stackalloc
关键字?
stackalloc
是 C# 中的一个关键字,用于在栈上分配一块内存。它通常用于需要高性能的场景,因为它避免了堆内存分配的开销。stackalloc
只能在 unsafe
上下文中使用。
stackalloc
的语法
T* ptr = stackalloc T[size];
T
是数据类型,如int
、float
等。size
是要分配的元素数量。ptr
是一个指针,指向分配的内存块的起始位置。
使用 stackalloc
的注意事项
unsafe
上下文:stackalloc
只能在unsafe
代码块或方法中使用。- 栈内存限制:栈内存是有限的,分配过大的内存块可能导致栈溢出。
- 生命周期:
stackalloc
分配的内存块在方法返回时自动释放,因此不能返回指向该内存块的指针。
示例代码解析
unsafe void Example() { int* block = stackalloc int[100]; for (int i = 0; i < 100; i++) { block[i] = i; } }
int* block = stackalloc int[100];
:在栈上分配了 100 个int
类型的内存空间,并将指针赋值给block
。for (int i = 0; i < 100; i++)
:遍历分配的内存块,并将每个元素初始化为其索引值。
适用场景
- 高性能计算:当需要快速分配和释放小块内存时,
stackalloc
是一个很好的选择。 - 临时缓冲区:用于需要临时缓冲区的场景,如字符串处理、图像处理等。
总结
stackalloc
是 C# 中用于在栈上分配内存的关键字,适用于需要高性能和临时缓冲区的场景。使用时需要注意栈内存的限制和 unsafe
上下文的要求。