14得票4回答
如何在Rust中将一个u8缓冲区转换为结构体?

我有一个大小未知的字节缓冲区,并且我想创建一个指向缓冲区开头内存的本地结构变量。按照在C语言中的做法,我在Rust中尝试了很多不同的方法,但一直遇到错误。这是我最新的尝试: use std::mem::{size_of, transmute}; #[repr(C, packed)] str...

13得票3回答
C#指针类型的默认值

我一直在研究 C# 语言规范,但找不到任何关于指针类型(如 int*)是否使用默认值进行初始化的内容。我创建了一个简单的测试应用程序,它似乎将它们初始化为零,但我想通过规范来确认这一点。 我开始寻找这个问题是因为我注意到,在反编译器中,IntPtr 类使用以下代码来定义其 IntPtr.Zer...

13得票3回答
不安全的C#技巧以提高速度

我不习惯使用指针(例如C ++),也不熟悉不安全的编程:只用“安全”的C#。 现在,我想在 .Net Micro Framework 中实现一个函数,其中紧凑性和性能非常重要。 基本上,我想要收集四个short类型的值,并将它们存入缓冲区(例如字节数组)。 假设每个样本都是这样的:struct...

13得票1回答
mem::forget(mem::uninitialized())是否是定义良好的行为?

在 mutagen 中,我正在对代码进行各种变异。其中一个我想要变异的模式是 if let Ok(x) = y { .. }。然而,这带来了相当大的挑战,因为我无法知道 y 的类型 - 用户可能已经构建了自己的枚举,其中包含一个一元的 Ok 变体。对于实际上具有实现 Default 的错误类型...

13得票2回答
为什么通过指针转换结构体很慢,而使用Unsafe.As就很快?

背景 我想要创建一些整数大小的struct(即32位和64位),方便地可转换为/从相同大小的原始不受管控类型(例如对于特定的32位结构体,为Int32和UInt32)。 然后这些结构体将公开其他用于位操作/索引的功能,这些功能不能直接在整数类型上使用。基本上,这是一种语法糖,提高了可读性和...

13得票4回答
C#中的不安全代码

在 C# 中,不安全代码的限制是什么?例如,我能否像使用 C 或 C++ 一样进行几乎任意的指针转换和算术操作?

13得票1回答
结构体中存在LayoutKind.Explicit时,必须遵循LayoutKind.Sequential。

运行以下代码时:using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime.InteropServices; namespace Stru...

13得票3回答
为什么通用类型不能有显式布局?

如果尝试使用[StructLayout(LayoutKind.Explicit)]属性创建通用结构体,在运行时使用该结构体将会引发异常: System.TypeLoadException: Could not load type 'foo' from assembly 'bar' bec...

13得票3回答
C#中快速复制数组

我有一个C#类,其中包含一个int[]数组(还有几个其他字段,但数组是主要的)。代码经常创建这个类的副本,并且分析显示,Array.Copy()调用以复制此数组需要很长时间。我该怎么做才能使它更快? 数组大小非常小且恒定:12个元素。因此,理想情况下,我想要像C语言风格的数组一样:在类本身内...

12得票3回答
C#使用反射获取不安全结构体中固定字段的类型

我正在尝试使用一些固定字段获取不安全结构的字段类型。 固定字段FieldType不返回实际类型。[StructLayout(LayoutKind.Sequential, Pack = 1)] public unsafe struct MyStruct { public UInt32 Fi...