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);
   }
}