GMP と BoehmGC
以下のようなコードを 32bit 環境の Mosh で実行すると大量に「Repeated allocation of very large block」という警告が出る。
GMP の allocation が問題みたいなので mp_set_memory_functions で GC_malloc_atomic を指定したいがこれは NG らしい。
Boehm GC の Repeated allocation of very large block 問題 - higepon blog
GMP を使用して多項式演算を実装していると, 「Repeated allocation of very large block」がでてくる.
多倍長整数を BoehmGC つかって自前で実装したことがあるのだけど, GC_malloc 使うのと GC_malloc_atomic では効率差が大きくでた.
GMP のソースみてないから大丈夫かどうかわからないのだけど, サイズの大きい allocate は整数の値を表す部分と文字列の部分で GC に影響ないだろうから, mp_set_memory_functions で渡す関数を以下のようにしたらだめなのかしら.
my_alloc(size) { if (size > AAA) { return GC_malloc_atomic(size); } else { return GC_malloc(size); } }
void *big_alloc(p, size) { if (size > AAA) { return GC_malloc_ignore_off_page(size); } else { return GC_malloc(size); } }