Tag: 不安全的

bool *在C#中的用处

我可以用任何有意义的方式使用bool* 。 我如何将bool*转换为例如一个byte ,或者将bool*存储在一个字节中 我的目标是在我的项目中管理自己的记忆,细节并不重要,只是喜欢做的事情。 现在我希望能够存储我自己的变量,我碰巧需要存储一个布尔值。 我如何使用unsafe和byte*存储这个布尔值,并最好地利用我的空间? 理想情况下,在字节中存储4位。

.NET中更快(不安全)的BinaryReader

我遇到了一个情况,我有一个非常大的文件,我需要从中读取二进制数据。 因此,我意识到.NET中的默认BinaryReader实现非常慢。 用.NET Reflector查看它后,我发现了这个: public virtual int ReadInt32() { if (this.m_isMemoryStream) { MemoryStream stream = this.m_stream as MemoryStream; return stream.InternalReadInt32(); } this.FillBuffer(4); return (((this.m_buffer[0] | (this.m_buffer[1] << 8)) | (this.m_buffer[2] << 0x10)) | (this.m_buffer[3] << 0x18)); } 这让我觉得非常低效,想到自32位CPU发明以来计算机是如何设计用于32位值的。 所以我使用这样的代码创建了我自己的(不安全的)FastBinaryReader类: public unsafe class FastBinaryReader :IDisposable { private static byte[] buffer = new byte[50]; //private Stream baseStream; […]

为什么固定大小的缓冲区(数组)必须是不安全的?

假设我想要一个7字节(或3或777)的值类型。 我可以这样定义: public struct Buffer71 { public byte b0; public byte b1; public byte b2; public byte b3; public byte b4; public byte b5; public byte b6; } 定义它的一种更简单的方法是使用固定缓冲区 public struct Buffer72 { public unsafe fixed byte bs[7]; } 当然第二个定义更简单。 问题在于必须为固定缓冲区提供unsafe关键字。 我知道这是使用指针实现的,因此不安全。 我的问题是为什么它必须是不安全的? 为什么C#不能提供任意常量长度数组并将它们保存为值类型而不是使其成为C#引用类型数组或不安全缓冲区?