3

私は、メモリを動的に管理して malloc の速度を上回るタスクを与えられました。いくつかの要件:

1) 構造体へのポインタを持っている

2) メモリの「チャンク」を使用する

3)メモリは次のような呼び出しで割り当てられます

init(memory * mem, int chunk_size, int num_chunks)

4) メモリ ポインタはグローバルに宣言されます。

5) システムコールを使わない

だから、私は自分の構造体を単純に持つことを考えました:

typdef struct {
  char *byte;
} memory;

そして、それは私の init 関数に次のようなことをさせます:

mem = new memory[chunk_size * num_chunks];

Cでそれができるかどうかはわかりません-通常、私はmallocを使用します! そして、ポインタをnullに設定するだけで解放できますか?

助けてくれてありがとう!

4

2 に答える 2

6

プロセス メモリ管理のシステム コールを使用して、独自のバージョンの「malloc」を実装できます... brk、sbrk、および mmap システム コールを試して、カーネルからメモリを取得します...

これには、実装して改善できる理解しやすい実装があります

http://www.inf.udec.cl/~leo/Malloc_tutorial.pdf

于 2013-11-08T19:53:50.913 に答える
1

いいえ、newC ではサポートされていません。ポインターを null に設定しても、関連付けられているメモリは解放されません。実際、これはメモリリークの良い方法です。

やろうとしていることの詳細によって異なりますが、通常はmalloc()、大きなメモリ ブロックを取得するために最初の呼び出しを行い、その大きなブロックからの割り当てを管理するために使用するカスタム関数を作成します。あなたのプログラム。

まったく使用したくない場合はmalloc()、オペレーティング システムのメモリ割り当て呼び出しのいずれかを使用する必要があります。たとえば、Windows では、HeapAlloc()またはを呼び出すことができますGlobalAlloc()。UNIX システムでは、brk()またはを呼び出しますsbrk()

于 2013-11-08T19:55:26.430 に答える