GC分野では動的割り当て量(allocate bytes)を時間の単位として使う

「400キロバイト未満の時間で終了する小規模なプログラムはここでは対象外とする」みたいな文章を読んだら普通首を傾げることでしょう。400キロバイト未満の時間? しかし、GC分野ではよくこんな言い回しをします。ここで言っている「400キロバイト」とは、時間としての値です。この「400キロバイト」とは「動的割り当て量が述べで400キロバイトに至る時間」という意味です。

例えば、以下のプログラムのようなプログラムを考えてみます。

#include <stdio.h>
#include <stdlib.h>
int main() {
  int i;
  for(i=0;i<10;++i) {
    printf("%p\n", malloc(8));
  }
  return 0;
}

このプログラムが開始から終了までにかかる時間はどのくらいでしょう。秒という単位であらわすと、私のローカル環境では約0.016秒になりました。動的割り当て量(allocate bytes)を単位とすると、80バイトです。

プログラムの実時間というと環境によってまちまちであることは用意に想像がつきます。というわけでGCのポリシーを考える際に「時間」というものとして実時間を用いるのは不適切である場合が多いです。その点動的割り当て量というものはプログラム言語や実行環境などによらず、「時間」の単位として適している、とされています。

そういうわけで、GCの論文を読んでいたりすると「40 kb old」とか「after 10mb」みたいな言い回しが普通に出てきます。もちろん、元々のサイズという意味でもバイトという単位は使われますから、文脈で時間について言ってるのかサイズについて言ってるのか読みとく必要があります。とっぺんぱらりのぷう。

test