0
私はtcmallocをuclibcに移植しようとしています。 Tcmallocにはsbrk関数の定義があり、sbrk関数はlibcから__sbrkを呼び出します。一方、Uclibcには__sbrk関数はありませんが、sbrkはあります。関数はtcmallocのc-sbrkでラップします
私はuclibc sbrkをtcmalloc sbrkからどのように呼び出すことができますか?
私はtcmallocをuclibcに移植しようとしています。 Tcmallocにはsbrk関数の定義があり、sbrk関数はlibcから__sbrkを呼び出します。一方、Uclibcには__sbrk関数はありませんが、sbrkはあります。関数はtcmallocのc-sbrkでラップします
私はuclibc sbrkをtcmalloc sbrkからどのように呼び出すことができますか?
sbrkは、(旧)system callですが、ほとんどのメモリアロケータはmmapより上に構築されています。関連項目this question
エミュレートしないで、システムコールを使用してください。そして、私は、システムコールを行うmmap
、ないsbrk
を使用して希望(通常mmap
)linux kernelからより多くのメモリを取得する唯一の方法です。アプリケーション(またはライブラリの)観点から
、system callは(それはほとんどSYSCALL
、SYSENTER
、int 0x80
等のような単一のマシン命令である)の原子です。
'sbrk'は' mmap'よりも有用かもしれません。なぜなら後者はその場で成長できないからです。 –
'mmap'はあなたに独立したメモリセグメントを与えます。私は、あなたがその場で成長する必要がある時を理解していません。また、 'MAP_GROWSDOWN'と' MAP_NORESERVE'もあります。参照http://stackoverflow.com/a/8504358/841108 –
割り当てたいメモリのすべてのビットに対して、 'mmap()'を呼びたくないかもしれません。通常、小さなメモリ要求は 'sbrk()'で処理され、大きいものは 'mmap()'を使用します。 – glglgl