2011-12-15 10 views
0

私はtcmallocをuclibcに移植しようとしています。 Tcmallocにはsbrk関数の定義があり、sbrk関数はlibcから__sbrkを呼び出します。一方、Uclibcには__sbrk関数はありませんが、sbrkはあります。関数はtcmallocのc-sbrkでラップします

私はuclibc sbrkをtcmalloc sbrkからどのように呼び出すことができますか?

答えて

1

sbrkは、(旧)system callですが、ほとんどのメモリアロケータはmmapより上に構築されています。関連項目this question

エミュレートしないで、システムコールを使用してください。そして、私は、システムコールを行うmmap、ないsbrk

を使用して希望(通常mmaplinux kernelからより多くのメモリを取得する唯一の方法です。アプリケーション(またはライブラリの)観点から

system callは(それはほとんどSYSCALLSYSENTERint 0x80等のような単一のマシン命令である)の原子です。

+1

'sbrk'は' mmap'よりも有用かもしれません。なぜなら後者はその場で成長できないからです。 –

+0

'mmap'はあなたに独立したメモリセグメントを与えます。私は、あなたがその場で成長する必要がある時を理解していません。また、 'MAP_GROWSDOWN'と' MAP_NORESERVE'もあります。参照http://stackoverflow.com/a/8504358/841108 –

+0

割り当てたいメモリのすべてのビットに対して、 'mmap()'を呼びたくないかもしれません。通常、小さなメモリ要求は 'sbrk()'で処理され、大きいものは 'mmap()'を使用します。 – glglgl

関連する問題