gpt4 book ai didi

c# - 如何获取像 ReadOnlySpan 这样的 ref 结构的 sizeof?

转载 作者:行者123 更新时间:2023-12-03 23:48:06 25 4
gpt4 key购买 nike

Microsoft 在 Write safe and efficient C# code 中推荐:

Apply the in modifier to readonly struct parameters larger than System.IntPtr.Size



是否有一种简单的方法可以检查像 ReadOnlySpan<byte> 这样的引用结构的托管内存大小? ?

以下方法不起作用:
// CS0208 Cannot get the size of a managed type
unsafe { size = sizeof(ReadOnlySpan<byte>); }

// CS0306 The type 'ReadOnlySpan<byte>' may not be used as a type argument
size = Marshal.SizeOf(default(ReadOnlySpan<byte>));

// ArgumentException "must not be a generic type definition"
size = Marshal.SizeOf(typeof(ReadOnlySpan<byte>));

最佳答案

来自 this answer , IL sizeof指令将返回托管大小,即使对于 C# sizeof 的类型也是如此。不接受,包括泛型引用结构类型,如 ReadOnlySpan<byte>Span<byte> .

Type type = typeof(ReadOnlySpan<byte>);

var dm = new DynamicMethod("$", typeof(int), Type.EmptyTypes);
ILGenerator il = dm.GetILGenerator();
il.Emit(OpCodes.Sizeof, type);
il.Emit(OpCodes.Ret);

int size = (int)dm.Invoke(null, null);

关于c# - 如何获取像 ReadOnlySpan 这样的 ref 结构的 sizeof?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61305357/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com