【问题标题】:Simulate a memory space in C#在 C# 中模拟内存空间
【发布时间】:2012-04-20 17:09:11
【问题描述】:

我想在 C# 中模拟闪存架构。更具体地说,架构如下所示:

  • 闪存是块的集合
  • 1 块 = 128 个扇区
  • 一个扇区由数据区和备用区组成
  • 数据区 = 8 kB
  • 备用区 = 16 B

我想在结构或类中表示它,但问题是我不知道如何在代码中表示一定数量的内存空间。我不能使用 int 或 char 数组,因为我不知道该内存空间中要存储什么......我不太确定,但我认为我可以使用 byte 数据类型来表示它......

【问题讨论】:

  • 字节数组byte[]怎么样?
  • 磁盘不等同于内存空间。您必须考虑功能,例如访问的工作原理。

标签: c# memory byte simulation


【解决方案1】:

是的,听起来你想要一个字节数组。例如:

 public sealed class Block
 {
     private readonly Sector[] sectors = new Sector[128];

     public Sector this[int index] { get { return sectors[index]; } }
 }

 public sealed class Sector
 {
     private readonly byte[] data = new byte[8 * 1024];

     public byte this[int index]
     {
         get { return data[index]; }
         set { data[index] = value; }
     }
 }

(如果需要,您也可以对“备​​用”区域进行建模 - 但尚不清楚您是否真的需要。)

这仅允许一次单字节访问 - 您可能希望在 Block 上使用 GetDataSetData 方法,它们一次读取/写入数据块。希望这能让你开始。

【讨论】:

  • 就我个人而言,我只是将整个范围声明为byte[],然后变得不安全并为扇区和块使用结构。这些可以很容易地映射,类似于通常在嵌入式环境中所做的。您甚至可以将stackalloc 所需的整个空间设置为byte*
  • @leppie:我猜这取决于目标是什么。我个人不会在没有充分理由的情况下使用不安全的代码,但这确实取决于目的。
猜你喜欢
  • 1970-01-01
  • 2020-05-21
  • 2012-08-02
  • 1970-01-01
  • 1970-01-01
  • 2012-04-05
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多