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

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

7得票3回答
如何获取固定缓冲区长度?

有没有一种方法可以获取固定大小缓冲区的长度? 类似这样: ```c size_t buffer_size = sizeof(buffer); ``` public struct MyStruct { public unsafe fixed byte buffer[100]; ...

11得票2回答
为什么Python的多进程管道不安全?

当有多个发送器和接收器时,我不明白为什么说Pipes是不安全的。 如果是这种情况,以下代码如何转换为使用Queues的代码?Queues在关闭时不会抛出EOFError异常,因此我的进程无法停止。我应该无限发送“毒药”消息来告诉它们停止(这样,我确信所有进程至少接收到一条毒药消息)吗? 我...

9得票2回答
为什么这个byte*和uint的加法没有进位到更高的双字中?

现在已在Microsoft Connect上提交,如果您认为需要修复,请投票支持。我也大幅简化了测试用例: byte* data = (byte*) 0x76543210; uint offset = 0x80000000; byte* wrong = data + offset; byte...

14得票1回答
可变原始指针(*mut T)的别名是否会导致未定义行为?

&mut T和&mut T会导致编译错误,这很好,借用可变两次是客观错误。 *mut T和*mut T是否未定义行为或者说这是完全有效的事情?也就是说,可变指针别名是有效的吗? 更糟糕的是,&mut T和*mut T实际上可以编译并按预期工作,我可以通过引用、指针和...

7得票2回答
Marshal.PtrToStringUni()与new String()有何区别?

假设我有一个指向Unicode字符串的char*指针,并且我知道它的长度: char* _unmanagedStr; int _unmanagedStrLength; 我有两种方法将它转换为.NET字符串: Marshal.PtrToStringUni((IntPtr)_unmanag...

34得票4回答
C#内存管理:unsafe关键字和指针

在C#中使用unsafe关键字来使用指针有哪些后果(正面/负面)?例如,垃圾回收的结果是什么,性能损失/收益如何,与其他需要手动管理内存的语言相比有何性能损失/收益,存在哪些危险,在哪种情况下使用此语言特性真正合理,编译时间是否更长... ?

11得票2回答
Java Unsafe.storeFence()文档错误?

Java 8增加了三个栅栏到sun.misc.Unsafe。阅读它们的文档后我感到有些困惑。于是我在网上搜索,找到了这个链接。根据上面的页面,我认为实际上这些方法几乎没有什么作用。如果我错了,请纠正我,大致上讲,loadFence()、storeFence()和fullFence()分别对应于...

32得票3回答
为什么固定大小的缓冲区(数组)必须声明为不安全?

假设我想要一个值类型为7字节(或3或777)。 我可以这样定义:public struct Buffer71 { public byte b0; public byte b1; public byte b2; public byte b3; publi...

34得票7回答
C#不安全/固定代码

你能举例说明在C#代码中什么时候使用"unsafe"和"fixed"是恰当的吗?我之前用过它,但从未真正找到过好的用法。 考虑以下代码...fixed (byte* pSrc = src, pDst = dst) { //Code that copies the bytes in a...