kbcl0のページ#2

  • (by K,2019.04.28)

(5) kmalloc

  • [1] kbcl0では、malloc()の代わりとなる関数としてkmalloc.alloc()、free()の代わりになる関数としてkmalloc.free()を用意しています。
  • これは本家のmalloc()と比較して10倍以上に高速で、しかもメモリ効率が良いという特徴があります。
  • この特徴は、kclib1のときからの特徴なので、詳しくはkclib1_0005に書いた通りです。
  • [2] kbcl0になってから、新規にkmalloc.inUse()関数を作りました。これはkmallocが管理しているメモリの中でどのくらいが使用中なのかを簡単に教えてくれる機能です。
  • これはいうなれば、alloc()したときに加算し、free()したときに減算しているだけの非常に簡単な仕組みです。
  • しかしこれが非常に便利で、一度体験してしまうと、もうこれなしで開発するのが嫌になるほどです。
  • [3] 普通、プログラムのある処理にどのくらいの処理時間がかかっているのかを知りたい場合、その処理の直前と直後で時刻を取得して、その差を計算することで確認することができます。
  • それと同様に、ある処理の前と後でメモリ消費量がどう変わったのかを知りたければ、kmalloc.inUse()を直前と直後で実行してその差を見ることで確認することができます。
  • これの何がいいのかですが、どこでメモリリークしているのかを探すのがすごくはかどるのです。
  • なんとなれば、自分が把握しているすべてのメモリをあえてfreeしてみて、それでもinUse()の結果が元に戻らないようなら、それはメモリリークしているというわけです。
  • [4] こんな簡単な仕組みでこんなに便利になるのだから、いつか標準のmallocにも入ればいいのにと思います。
  • もちろん一部のデバッグツールとかではできるのかもしれませんが、それだとプログラムの中から自由には呼べないので、複雑なケースの測定はやりにくいと思うのです。
  • 標準に入れば、いろんな環境で同じように使えるようになるので、きっと重宝すると思います!

こめんと欄


コメントお名前NameLink

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019-04-28 (日) 21:49:30 (117d)