tcmallocをuclibcに移植しようとしています。Tcmallocにはsbrk関数の定義があり、sbrk関数はlibcから__sbrkを呼び出します。一方、Uclibcには__sbrk関数はありませんが、sbrkはあります。
tcmallocsbrkからuclibcsbrkを呼び出す方法について何かアイデアはありますか?
sbrkは(古い)システムコールですが、ほとんどのメモリアロケータはmmapより上に構築されています。この質問も参照してください
エミュレートするのではなく、syscallを使用する必要があります。mmap
そして、私はではなく、を使用したいと思いますsbrk
Linuxカーネルmmap
からより多くのメモリを取得する唯一の方法は、システムコール(通常は)を実行することです。
アプリケーション(またはライブラリ)の観点からは、システムコールはアトミックです(ほとんどの場合、、などのような単一のマシン命令ですSYSCALL
)。SYSENTER
int 0x80