18

割り当てられたアドレスとそのサイズはどこmalloc()に保存されますか (Linux GCC)? free()一部の実装では、実際に割り当てられたメモリの前にそれらを保存することを読みましたが、テストでは確認できませんでした。

背景、おそらく誰かがこれについて別のヒントを持っています:

他のプロセスの文字列の現在の値を判断するために、プロセスのヒープメモリを分析して少し実験しています。プロセス ヒープ メモリへのアクセスとその中の探索は問題ありません。ただし、文字列の値が変更され、プロセスがメモリの新しい部分を毎回割り当てるため、文字列のアドレスが変更されます。文字列の形式は固定されているため、簡単に見つけることができますが、いくつかの変更を加えた後でも、古いバージョンの文字列がヒープ メモリに残っているため (おそらく解放されますが、再利用/上書きはされません)、そのため、私にはわかりません。現在の文字列はどれですか。

したがって、現在のものを引き続き見つけるために、メモリ内で見つけた文字列がまだ使用されているかどうかを、そのアドレスとアドレスを比較して確認し、知りたいと考えていmalloc()ますfree()

チャオ、エルマー

4

2 に答える 2

15

malloc/freeがメモリ領域のサイズを格納できる方法はたくさんあります。たとえば、mallocによって返される領域の直前に格納される場合があります。または、他の場所のルックアップテーブルに格納されている可能性があります。または、暗黙的に保存される場合があります。一部の領域は、特定のサイズの割り当て用に予約されている場合があります。

Linux(glibc)のCライブラリがこれをどのように行うかを知るには、http://ftp.gnu.org/gnu/glibc/malloc/malloc.cからソースコードを入手してファイルを調べてください。上部にいくつかのドキュメントがあり、それはDougLeaによるメモリアロケータを参照しています。

于 2009-05-12T09:40:22.533 に答える
1

もちろん、これは標準ライブラリの実装次第です。したがって、最善の策は、ライブラリのソースを調べて( Linuxではglibcがデフォルトです)、それを理解できるかどうかを確認することです。それはおそらく些細なことではないでしょう。

于 2009-05-12T09:41:15.480 に答える