無題

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
メモリマネージャー

無題

#1

投稿記事 by メモリマネージャー » 15年前

今メモリマネージャーを作っているのですが
最初に大きく作った領域からメモリを割り当てる方法がよく分かりません
よろしかったら教えていただけませんか?

めるぽん

Re:無題

#2

投稿記事 by めるぽん » 15年前

どういうメモリマネージャを作ろうとしているのかによると思いますけど、
汎用的(固定サイズではなく、様々な大きさのメモリを確保できる)なものであれば、
フリーリストで繋いでいくのが一般的ですかね。

へろりくしょん

Re:無題

#3

投稿記事 by へろりくしょん » 15年前

最初に大きく作った領域からというのは、この時点ですでに確保していると解釈出来るのですが。 よく分かりません。

最初に大量に確保しておいて、少しずつ使っていく。 というのであれば。

char *buf = malloc(100000);
int *hoge = (int*)&buf[300];

とかいう風にするのもアリですか。


昔々、マクロ言語のコンパイラを作った時は、構文木用のメモリにこの方法を使いました。
いらなくなったらまとめて一気に解放出来るので楽です。
深い階層で文法エラー等が発生した時に、longjmp() で一気に戻ってくる設計でしたので。


ただし、確保と削除を頻繁に行うのには不向きですね。
内部で断片化しますし、ギャップバッファで実装してもオーバーヘッドが高そうです。


やっぱりリストが一番だと思いますよ。

閉鎖

“C言語何でも質問掲示板” へ戻る