2012-04-07 4 views
0

C#でフラッシュメモリアーキテクチャをシミュレートしたい。 =部門は、データ領域とスペア領域 C#のメモリ空間をシミュレートする

  • データ領域で構成されている
    • フラッシュメモリはブロックの集合である
    • 1ブロック= 128個のセクタ:具体的なアーキテクチャは、次のようになります。 8キロバイト
    • スペアエリア= 16 B

    私は、構造体やクラスでこれを表現したかったが、問題は、私はどのように担当者に分からないですコード内に一定量のメモリスペースを再送します。私はそのメモリ空間に何が格納されるのかわからないので、int型またはchar型の配列を使用することはできません....私は確信していませんが、私はバイトデータ型を使用して表すことができると思います....

  • +2

    バイト配列 'byte []'はどうですか? –

    +1

    ディスクはメモリ空間と同じではありません。アクセスの仕組みなどの機能について考える必要があります。 –

    答えて

    2

    はい、バイト配列が必要です。たとえば、次のように

    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; } 
        } 
    } 
    

    (あなたがしたい場合にも、「スペア」の領域をモデル化することができます - それはあなたが本当ににかかわらず、必要があるかどうかは明らかではありません。)のみのシングルバイトで-A可能です

    タイムアクセス - Blockには、一度にデータのチャンクを読み書きするGetDataSetDataメソッドが必要です。うまくいけば、これはあなたがしかし始まります。

    +1

    個人的には、範囲全体を 'byte []'として宣言してから、セクションとブロックに安全でなくても構いません。これらは、組み込み環境で通常行われるのと同様に、簡単にマッピングすることができます。必要なスペース全体を 'byte *'に 'stackalloc'するだけでも可能です。 – leppie

    +0

    @leppie:それは目的が何であるかによって決まります。個人的には安全でないコードを使用するのは正当な理由がありませんが、目的にかかっています。 –

    関連する問題