0

私は最近インタビューで関数に書くように頼まれました -

  1. これまでに割り当てられたメモリ アドレスのピーク値を返す mymalloc。
  2. myfree は、ユーザーがメモリ破損を引き起こした操作を行ったかどうかを示します。例えば。プログラムはメモリ アドレスを 101 から 200 の位置に割り当てます。プログラムが境界の外側、つまり 101 と 200 に書き込むと、メモリの破損が発生すると言われます。

注: これらの関数は、malloc と free を内部的に使用して、メモリの割り当てと解放を行うことができます。

誰かがこれについて私を案内してもらえますか。

4

1 に答える 1

1
  1. mymalloc は sbrk(0) の値を使用して、プログラム ヒープ ブレークの現在の位置を確認できます。

  2. 破損部分を確認するのは少し難しいです。200 バイト以降が変更されているかどうかを確認するだけであれば、これを達成できます。すべてのメモリ割り当てには、割り当てのサイズを格納する割り当てられたバッファー サイズの前にヘッダーがあるため、次のブロックのヘッダー、つまり場所 201 に格納されているヘッダーをチェックして、プログラムが境界を越えて 201 に書き込むことを確認できます。

于 2013-03-30T08:03:37.760 に答える