In the Part 1 the layouts of:
1. System.Object
2. T[] array
3. string
This article also reveals how to access those types in unsafe or unmanaged environment. How we can change the object type or get array/string length pointer to change it later.
In the Part 1 the layouts of:
1. System.Object
2. T[] array
3. string
This article also reveals how to access those types in unsafe or unmanaged environment. How we can change the object type or get array/string length pointer to change it later.
When you want to have single DLL which works in all .NET runtimes (Mono/IL2CPP/NETFX/NETCore), it’s crucial to detect which runtime you are currently in. While there are some dynamic methods, like query runtime name and check it for “Mono” string, it’s not the best approach, and definitely not the performant one.
Field offsets can help you in numerous ways, first what comes in mind is that you can set fields of the struct or class instance without using TypedReference (doesn’t work in IL2CPP) and without GC allocs which comes with boxing when either instance or a value is a struct. Second, it could help you with unmanaged access to the class/struct for custom binary serialization, etc.
When you come from C++ to C# it’s such a relief. C# is a greatly designed language, you can do almost anything you want with it, apart from some design choises like macroses and C++ template<>. But sometimes we can find ourselves near the wall which you can’t pass with C# itself. IL Comes To […]
Overview and performance comparasion for bool -> int/uint/byte conversion in C#
And simple solution for fast platform-independent conversion.
Short overview of the costs you are paying by using extremely safe single-threaded Unity API (which is basically every call to the engine, including properties like Transform.localPosition) and how to avoid paying them.
Spoiler: these costs are huge.
Not really quick overview of methods for taking a pointer of managed C# object.
With a great forbidden solution inside.
Jump in!