malloc

mallocをdebug compileしたい

glibcをダウンロードし解凍します。 glibcのフォルダーないに入りbuildフォルダーをつくります。 cd glibc-2.21 mkdir build cd build glibcをインストールするフォルダーを指定してconfigureします。 ../configure --prefix=/home/shingo/lib/glibc そしてm…

glibcをデバッグしてみよう2

前回glibcを取ってきてそれをコンパイルしてみました。 そしてそのあと簡単なテストを作ってそのライブラリーをリンクしました。 今回はglibcの中に簡単な関数を作ってそれをgdbでデバッグしてみます。 mallocにhelloworldという関数を作ってみましょう。 gl…

glibcをデバッグしてみよう

gnuのmallocも読んでみましょう。 まずはダウンロード http://ftp.gnu.org/gnu/glibc/ 最新を取ってきましょう。 そうしたらコンパイル とここでちょっと手間取ります。 glibcを展開したフォルダーに入って./configureとやると configure: error: you must c…

malloc読んでみた4 chunkとrun

chunkはarenaのrunが作られるときにmmapで取り出されるメモリーの領域です。arena_run_allocを見てみましょう。arenaのrun_avail内にすでにメモリーが取られている場合はそのメモリーをrunとして返します。 mapelm = arena_avail_tree_nsearch(&arena->runs_…

malloc読んでみた3 mallocの中のデータ型

mallocで使われるデータ型はまずarenaがあります。arenaはarena_bin_tの配列を持っています。 struct arena_s { ... arena_bin_t bins[1]; /* Dynamically sized. */ }; arena_binはarena_runの赤黒木を持っています。 struct arena_bin_s { arena_run_t *ru…

malloc読んでみた2 getpagesizes

では /usr/src/lib/libc/gen/getpagesizes.cを見てみましょう。 intgetpagesizes(size_t pagesize[], int nelem){ static u_long ps[MAXPAGESIZES]; static int nops; size_t size; int i; if (nelem < 0 || (nelem > 0 && pagesize == NULL)) { errno = EIN…

malloc読んでみた1 initからpagesizeまで

freebsdのmalloc.cを読んで見ましょう。 場所は /usr/src/lib/libc/stdlibの中にあります。 ヘッダーはusr/src/sys/sys/malloc.hですね。 では見てみましょう! スタート地点はもちろん void * malloc(size_t size) (5281行) ですよね。 この中でまず目につ…