SLua 实现原理 0. SLua 实现分成两个部分:c层和c#层c层主要是lua或者luajit,加一个c层的接口,以及一些可以添加的第三方库 c#层:主要解决: 如何调用lua代码 lua如何调用c#代码 c#对象如何传递给lua lua对象如何传递给c# 这些问题。 1. 调用lua代码LuaDll 导入了lua相关的c接口,用于c#调用 2. lua调用c#方法通过lua_pushcfunction 将c#函 2020-03-28 Unity SLua Unity
C# 中 List 的内存分配 之前在开发中用到 List 的时候几乎就是拿过来就用,从来没有考虑过 List 的内存分配问题,试想一个有 10 万元素的 List 在构造和添加元素时内存是如何变化的呢? 在 MSDN 上关于 List 的 Capacity 属性是这么解释的:“获取或设置该内部数据结构在不调整大小的情况下能够容纳的元素总数”。当我们添加的元素数量小于等于 Capacity 的值时,List 是不会重新调整内部数 2020-03-28 CSharp CSharp
C# 堆栈和托管堆 堆栈 Stack堆栈中存储值类型。堆栈实际上是向下填充,即由高内存地址指向低内存地址填充。堆栈的工作方式是先分配内存的变量后释放(先进后出原则)。堆栈中的变量是从下向上释放,这样就保证了堆栈中先进后出的规则不与变量的生命周期起冲突!堆栈的性能非常高,但是对于所有的变量来说还不太灵活,而且变量的生命周期必须嵌套。通常我们希望使用一种方法分配内存来存储数据,并且方法退出后很长一段时间内数据仍然可以使用 2020-03-28 CSharp CSharp
C# 垃圾回收 垃圾回收.NET 的垃圾回收器管理应用程序的内存分配和释放。 每当有对象新建时,公共语言运行时都会从托管堆为对象分配内存。 只要托管堆中有地址空间,运行时就会继续为新对象分配空间。 不过,内存并不是无限的。 垃圾回收器最终必须执行垃圾回收来释放一些内存。 垃圾回收器的优化引擎会根据所执行的分配来确定执行回收的最佳时机。 执行回收时,垃圾回收器会在托管堆中检查应用程序不再使用的对象,然后执行必要的操 2020-03-28 CSharp CSharp
C# 自动内存管理 自动内存管理是公共语言运行时在托管执行过程中提供的服务之一。 公共语言运行时的垃圾回收器为应用程序管理内存的分配和释放。 对开发人员而言,这就意味着在开发托管应用程序时不必编写执行内存管理任务的代码。 自动内存管理可解决常见问题,例如,忘记释放对象并导致内存泄漏,或尝试访问已释放对象的内存。 本节描述垃圾回收器如何分配和释放内存。 分配内存初始化新进程时,运行时会为进程保留一个连续的地址空间区域。 2020-03-28 CSharp CShaprp