PSPであそぼう(3)

仕組みは簡単。g++*1で例外処理を使わないオプション(-fno-exceptions)をつけてコンパイルすれば、あとはnew/deleteを自前のnew/deleteでoverrideするだけでヨロシイ。


例外処理は使ったほうがエレガントになるし、使えないと例外処理を用いているライブラリをportingしてくるときに苦労するのだが、gccの例外処理の下請け関数は「_Unwind_Resume」なので、詳しく知りたい人はそのキーワードで検索して調べてチョーダイ。


Javaスレッドプログラミング―並列オブジェクト指向プログラミングの設計原理 (OO SELECTION)

それで問題の「自前のnew/delete」だが、これはDoug Lea氏のmalloc(通称dlmalloc)を使うと良いだろう。

http://gee.cs.oswego.edu/dl/html/malloc.html

Doug Lea氏は、Javaスレッドプログラミング―並列オブジェクト指向プログラミングの設計原理の作者でもあり、このmalloc.cはcygwinでも使われている。


ソースを読めば、OS independentに作られていることがわかる。「MSPACES」というのがユーザーが事前にメモリを渡しておいて、そこからmalloc/freeを行なうための仕組みだ。事前に渡しておくメモリはstaticな配列を8MBほど確保しておいてそいつを初期化のときに渡している。その他、詳しいことは昨日の日記で紹介したソースを読んでいただきたい。動作報告等は、昨日か今日の日記にコメントをもらえるとありがたい。(つづく)

*1:PSPToolChainのほうはgccでも拡張子がcppだと勝手にg++が呼び出されるのかな?