私は malloc の実装を書いていて、誰かがこの問題を手伝ってくれるかどうか疑問に思っていました。
基本的にはsbrk()でメモリを確保し、メモリが空いていることを確認してから再利用したい。
つまり、基本的に、私の記憶がこのようになっていると想像してください
|------------------------------|
...そして、いくつかの割り当てを行います。メモリを割り当てると、各ビットにヘッド (h) とデータ (d) があります。
|hddddddhddd---hdd--hddd-------|
これでこれらの穴ができました。たとえば、ダイアグラムの最初のギャップを使用したい場合、ヘッド (h) とボディ (dd) も持つように設定するにはどうすればよいでしょうか?
必要なメモリ位置へのポインタを取得したところまで来ました。C では、ポインターによってポイントされます。ポインターにはカスタム型があり、「メタ」は私が定義した構造体です。だから今私は持っています
metaStruct * mypointer = the memory address.
しかし、私がやろうとすると
mypointer->size = 30;
または
mypointer->buddy = 1;
セグメンテーション違反が発生します。
質問: sbrk() を介して割り当てられたメモリ アドレスが構造体の形式になるように設定するにはどうすればよいですか? 明らかに、私は単に myPointer = malloc(sizeof(metaStruct)) に行くことはできません。なぜなら、私は malloc 自体を書いているからです。sbrk() でより多くのスペースを使用することにも興味がありませんが、私が指摘している既存のスペースを利用することには興味があります (ジャンク データを無視してスペースを使用したい)。
どうすればそれを行うことができますか?