11得票4回答
将 System.Decimal 转换为 System.Guid

我有一个大字典,其中键为十进制数,但是System.Decimal的GetHashCode()非常糟糕。为了证明我的猜测,我使用100,000个相邻十进制数运行了一个for循环并检查了分布情况。 100,000个不同的十进制数只使用了2个(两个!!!)不同的哈希码。 十进制数表示为16字节。...

22得票1回答
使用不安全代码进行 C# 位图图像掩码处理

我正在使用以下代码在C#中创建图像蒙版:for(int x = 0; x < width; x++) { for(int y = 0; y < height; y++) { bmp.SetPixel(x,y,Color.White); } }...

8得票5回答
使用Unsafe.getUnsafe().throwException抛出异常

我在java.lang.Class#newInstance0中发现了一些有趣的代码: // Run constructor try { return tmpConstructor.newInstance((Object[])null); } catch (InvocationTarg...

16得票1回答
如何从原始指针获取数组或切片?

我能否从std::ptr::read中获取一个数组? 我想做类似以下的操作:let mut v: Vec<u8> = ... let view = &some_struct as *const _ as *const u8; v.write(&std::ptr::...

7得票1回答
可变访问器使用强制转换是安全的吗?

我正在尝试理解get函数中的&和&mut重复代码问题。我试图理解是否使用unsafe块内的强制类型转换来解决这个问题是安全的。 以下是问题的示例,取自非常好的教程使用过多的链接列表学习Rust。 type Link<T> = Option<Box<N...

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

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

79得票5回答
何时在C#/.NET中使用指针?

我知道C#允许程序员在不安全的上下文中访问和使用指针。但是,什么情况下需要使用它? 在什么情况下,使用指针变得不可避免? 这只是出于性能方面的考虑吗? 此外,为什么C#通过不安全的上下文公开了这个功能,并从中删除了所有托管优势?从理论上讲,有可能在不失去托管环境的任何优势的情况下使用指针吗?

8得票3回答
被识破了!如何使用sun.misc.Unsafe加速byte[]查找?

我正在尝试使用Unsafe来遍历内存,而不是遍历byte[]数组中的值。使用unsafe分配了一个内存块,该内存足以容纳65536个字节值。 我正在尝试以下内容: char aChar = some character if ((byte) 0 == (unsafe.getByte(ba...

8得票2回答
在不安全代码中,将指针赋值为null和0之间有什么区别吗?

这可能看起来很奇怪,但在C语言中,(size_t)(void*)0 == 0不能被语言规范保证。编译器允许使用任何值作为null(尽管它们几乎总是使用0)。 在C#中,您可以在不安全代码中将null或(T*)0分配给指针。 有什么区别吗? (long)(void*)0 == 0是否保证?...

9得票7回答
在C#中,ref和out与C++中的指针相同吗?

我刚刚用C#编写了一个类似于这样的Swap例程: static void Swap(ref int x, ref int y) { int temp = x; x = y; y = temp; } 它与这段C++代码执行相同的操作: void swap(int ...