c# 那些不常用的操作

stackalloc


临时数组用到内存怎么办?

image


有一种思路是把他抽成成员变量,复用,复用是减少GC,但不彻底,这个缓存的管理也麻烦,这个缓存自身还是要经过GC的


用stackalloc可以彻底解决

image

stackalloc 分配的内存在栈上,无需清理,这个方式仅仅用于blittable的结构体,及数值类型以及struct内部没有引用类型


比如


struct ABC//这就不是一个blittable结构

{

string aab;

}


blittable结构

由此衍生出来的问题是,我们怎么尽可能让struct 成为blittable的,c#有另外一个很少人使用的特性

image

使用unsafe fixed 语法,就可以定义固定的内存,和c语言一样。

这样可以用和c一样的0终结char数组去表示字符串


image

blitable结构的好处是他是内存一致的,在读写方面我们就可以回到c语言一样的思路

posted @ 2021-03-12 13:51  疯光无线  阅读(172)  评论(0编辑  收藏  举报