NewMixinRunTime->Update
NewMixinRunTime/新随我心意运行时,已经在github上传并半开源,最新NewMixinRunTime.dll/lib已经在github完成上传;
预计1.0正式版后可能会指定具体开源协议或不开源;(后者可能性不大)
链接:
http://t.cn/AX9SLumT
提醒:
Entity、Object、ObjectManager等内存相关均由MixinGarbageCollection分配内存,MixinGarbageCollection严格要求指针,千万不要使用IntPtr、UIntPtr、nuint、nint,否则会导致无法预料的后果;
其中,Mahtf库为纯C手写库,包含:double、float、long,使用时请按照Mahtf.h导出的头文件严格对齐每一笔偏移量,不容得一丝一毫偏差;
如果使用AI,对于P/Invoke时它们会建议你使用IntPtr做底层指针交换,如果你想要让你的程序崩溃的话(比如使用MixinGarbageCollection回收与分配、MemoryMonitor回收与分配)可以听AI的建议,否则就需要使用指针;
内置IntPtr与UIntPtr,它们是指针,即:signed int*、unsigned long long*如果你要测试MixinGarbageCollection是不是管用的你可以这样测试:
C Sharp:
unsafe class ClassName{
[Dllimport("NewMixinRunTime.dll",CallingConvention = CallingConvention.Cdecl)]//导入NewMixinRunTime.dll,导出约定为C属decl
public static extern void* MixinGC_AllocateEx(UIntPtr/IntPtr payload, MixinAllocFlags flags);//在这里更建议UIntPtr正式对其C中的size_t,因为这两者在C中都属于无符号整数,IntPtr虽然也可以但可能存在超出限制被截断风险;
//同上
public static extern void MixinGC_FreeEx(void* payload);//参数必须是指针,如果使用IntPtr会导致接收到错误的信息导致在释放时因为指针偏移或对齐大小存在误差等无法估计的情况下造成释放失败,Free只会释放在NewMixinRunTime中的Object对象,而不管C Sharp中的对象,如果用它试图释放托管对象时会出现托管GC指针异常;
public static extern bool MixinGC_Init(UIntPtr initial_handle_capacity);//必须先初始化;
//结构体对齐
[StructLayout(LayoutKind.Explicit,Size=4,Pack=4)]
struct MixinGCStats:enum{
MIXIN_ALLOC_NONE=0,
MIXIN_ALLOC_ZERO=1<<0,
MIXIN_ALLOC_NO_GC=1<<1,
MIXIN_ALLOC_GC_TRACKED=1<<2,
MIXIN_ALLOC_FIXED=1<<3,
MIXIN_ALLOC_INTERNAL=1<<4
}
//比如用nuint640_t
MixinGC_Init(1024);
nuint640_t* p=(nuint640_t*)MixinGC_AllocateEx(sizeof(nuint640_t),MIXIN_ALLOC_NO_GC);
Debug.Log($"{p}");
MixinGC_FreeEx(p);//这里需要显示转换为nuint640_t*
Debug.Log($"{p}");
}
输出结果是地址,应该是这样的:
AllocateEx->0000016030B5EF50;
FreeEx ->0000016030B5EF50;
如果没有出现FreeEx为纯零也是正常现象,因为FreeEx并没有内置将指针置为null((void*)0)如果打印出来这个结果千万不要使用被FreeEx的目标,否则会报错;
后续会在空闲时间内对这个问题进行修复,同样的还有mm_free本身不自带主动置为null的能力,而mm_safe_free(void** ptr)却可以主动置为null;
上面就是对NewMixinRunTime用法的简单介绍,详情可以将.h贴给AI,它会帮助你,但请务必注意,对于指针的明确告诉AI这是对地址要求极其严格的,如果它还建议你用IntPtr或UIntPtr、nint、nuint时,换一个AI吧;
#newmixinruntime##mixincore##新随我心意运行时##新手编程##从零造轮子##newmixincompile#
