-1

メモリアロケータを初期化し、_lengthバイトの一部を利用可能にするinit_allocator()関数を実装しようとしています。アロケータは、割り当ての最小単位として_basic_block_sizeを使用します。この関数は、アロケータに使用可能なメモリ量を返します。エラーが発生した場合は、0を返します。Cでメモリアロケータを初期化

これは私がこれまで持っているものです。

int memAvail; // amount of memory to be made available to allocator 

unsigned int init_allocator(unsigned int _basic_block_size, unsigned int _length){ 
    if (_basic_block_size < _ length){ 
     memAvail = _length/_basic_block_size; 
     return memAvail; 
    } 
    else{   
     return 0; 
    } 
} 

これは正しい実装である場合、私は知らないが、それは私に権利思えます。私が間違っていることはありますか?私はポインタを利用するはずですか?アドバイスをいただければ幸いです。これはchar型のアロケータであることから

+2

要件は不明ですが、ほとんどのメモリサブアロケータはそれ以上の機能を備えています。たとえば、OS APIを呼び出して、管理するために大きなメモリブロックを確保する必要があります。 –

+0

私は些細なメモリアロケータを実装するはずです。私はOS AP1が何を意味するのかよく分からない – carl123

答えて

2

これはKernighan and Ritchie

#include<stdio.h> 

#define ALLOCSIZE 10000 

static char allocbuf[ALLOCSIZE]; 
static char *allocp=allocbuf; 

/* Return pointer to n characters */ 
char *alloc(int n) 
{ 
    if(allocbuf+ALLOCSIZE-allocp>=n){ 
     // It fits 
     allocp+=n; 
     return allocp-n; 
    }else 
     // Not enough room 
     return 0; 
} 

allocbufで第5.4章の例のメモリアロケータでは、あなたの文字を格納するメモリバッファです。 *alloccpは、最初にallocbufの最初の(つまり0番目の)要素である次の空き位置へのポインタです。 *allocは、プログラムがn文字を格納するallocbufの最初のスポットへのポインタを返します。

これは簡単に他のデータ型に変換することができ、単純なアロケータ設計の原則を示しています。要件を明確にして、コンテンツを追加できます。

+0

これは明らかに宿題に関する質問です。あなたは、いくつかの異なる無関係なコードを表示することによって、OPには本当に役立たない。 – Olaf

+0

@Olaf:これは異なるものではなく、無関係でもありません。基本的なメモリアロケータが表示され、変更して拡張することができます。 OPは彼のニーズをうまく説明していなかった - 私は彼にそうするように奨励した。彼はまた、タスクのためのポインタが必要かどうかを尋ねていましたが、これはそのことを示しています。私は単純な使用例を追加しますが、私はフィードバックを待つと思っていました。私はOPの問題を解決することもできますが、それが建設的かどうかはわかりませんでした。あなたが同意しないなら、私はこの答えを広げます。 – atru

+1

[ask]を読んでください。 yの質問が規則に従わない場合は、コメントの明確化を求めてください。何も続くことがなければ、ただ答えないでください。私たちはコーディングやデバッグのサービスではありません。そのような答えは、自分の宿題をするために頼む怠惰な学生からの悪い質問を促すだけです。設計とデバッグ/テストはプログラミングの主要な部分です!実際には、コードを書くよりはるかに時間がかかります。 – Olaf