.NET source 系列:System.Collections.Generic.List
System.Collections.Generic.List
参考版本为 .net framework 4.8
https://referencesource.microsoft.com/#mscorlib/system/collections/generic/list.cs
摘要
- 泛型类型
List<T>
,实现接口 IList<T>,IReadOnlyList<T> - 使用数组
T[] _items
实现,当前已存储的元素个数为_size
/Count
,当前容量大小通过 Capacity得到,直接返回数组_items
的长度。
Protocol Buffers 编码
Protocol Buffers 编码
reference:
本文翻译自官方文档,补充了部分前置知识与帮助理解的示例。
简介
Protocol Buffers (a.k.a., protobuf) are Google's language-neutral, platform-neutral, extensible mechanism for serializing structured data.
Protocol Buffers 是Google由推出的,跨语言、跨平台的用于序列化数据结构的可拓展机制 / 协议。
序列化格式
Protobuf的编码基于变种的Base128,下面先简单介绍Base64,Base128以及ZigZag编码。
Base64编码
reference: https://www.zhihu.com/question/585411183
Base64编码的设计初衷是为了让数据在设备间传输时,目标机器能够正确地“理解”字节流中的内容:字节流中的内容均可以通过ascii字符正常显示。
Linux内存管理(基础概念)
翻译自:https://perfetto.dev/docs/case-studies/memory#heapprofd
想看一下项目在真机上的表现,所以工作之余用了Perfetto来做项目的性能测试。阅读官方文档的时候发现了这一章节介绍了Linux内存管理的一些基础概念,所以就简单翻译了一下。
从内核的角度,内存被划分为等大小4KiB的块,这些块被称为页(pages)。
这些页被组织于连续的虚拟空间中,此空间称为VMA(Virtual Memory Area)。
当一个进程通过 mmap()
系统调用请求内存时,VMA就会被创建。一般情况下,应用不会直接调用mmap(),而是通过内存分配器间接调用,像是
C 的 malloc()
, C++ 的 operator new()
或是 Java
的 new X()
等等。
VMA可以被分为两种类型:文件后备页(file-backed)与匿名页(anonymous)。
games101-lecture14 笔记
Today
- Acceleration 加速结构:使用AABB来加速光线追踪
- Uniform grids
- Spatial partitions
- Basic radiometry(辐射度量学)
- 进阶:不同于Whitted-Style的光线追踪
光线追踪加速结构
均匀网格方案:Uniform grids
预处理:构建加速网格
找一个包围盒,在包围盒中构建均匀网格,记录每一个与物体相交的网格
光线与场景求交
射出一道光线,让光线与格子求交,若格子内存在物体,再让光线与物体求交:光线与格子求交是快速的,而与实际物体求交是很慢的,通过这样的理念来优化
经验告诉我们
当格子数等于C * 对象数时,结果会比较好;三维空间下常数C可以取27
缺陷
当细节物品在空间中分布不均匀时,存在大规模集中、大规模空白:”Teapot in a stadium” problem
*在一些场景下还是好用的,仍有在使用
空间划分 Spatial partitions
![空间划分树结构](https://s2.loli.net/2023/09/17/QPXy1Yma5cLDHVo.png)
Unity IL2CPP 编码限制
参考
- unity documentation-Scripting restrictions 2018.4
- unity documentations-Scripting restrictions 2022.3
内容相差不大,2022.3在2018.4的基础上做了一些补充,并去除了一个关于泛型虚方法例子。
Ahead-of-time编译(AOT)
一些平台不允许运行时的代码生成(运行时开辟内存用于存放可执行的机器指令)。因此,一切依赖于just-in-time(JIT)的托管代码(managed code)在这些平台上都无法运行。为此,你需要把所有的托管代码都进行AOT编译。在一般情况下,这个限制不会带来什么影响。但在AOT编译的平台上,也存在着一些需要额外注意的要点。