このページを編集する際は、[[解読日記一覧]]の「概要」に従ってください。

*タイトル [#g15af898]

-関数ポインタ①

*事例 [#pb2947a9]

-[[MemoryContextAlloc()/postgresql-8.1.4]]

*課題 [#u356b7d5]

[[heap_fill_tuple()/postgresql-8.1.4]]から読み始めた。

すると、関数 MemoryContextAlloc() 内で、関数ポインタ context->methods->alloc で指定されている関数がコールされている記述が見つかった。

しかし、ここでコールされている関数がどのような動作をするのか確認できない。

*解決方法 [#aed960d4]

こうなった原因は、断片的な関数単位で読もうとして、CPUが実行するのと同じ順序で読んでいなかったため。

具体的に言うと、[[heap_fill_tuple()/postgresql-8.1.4]]からいきなり読み始めてしまったため、この関数を実行する前に初期化等の段階で行われているはずの、関数ポインタ代入処理の記述に出会うことができなかった。

[[2005_6_23カーネル座談会③>http://hira.main.jp/wiki/pukiwiki.php?2005_6_23%A5%AB%A1%BC%A5%CD%A5%EB%BA%C2%C3%CC%B2%F1%AD%A3]]
の「感想を聞かせてください」にあるひらさんのコメントによると、

>'''ひらメソッドは実行の特性に着目したアプローチ(つまりCPUが実行するのと同じ順序で読む)であり、記述の特性に左右されません。'''

とあり、処理の実行順に読んでいくのがひらメソッドの理念であることがわかる。

解決方法としては、[[heap_fill_tuple()/postgresql-8.1.4]]からの解読を中断する。その後、実行開始部から読むなど、処理の順序に則した順番で解読を行う。
解決方法としては、[[heap_fill_tuple()/postgresql-8.1.4]]からの解読を中断する。その後、実行開始部から読むなど、処理の順序に則した順番で解読をやりなおす。

*履歴 [#t16ccd82]

-作者:[[testnoda/ページ作者]]
-日付:2007/4/24

*コメント [#c602c444]

#comment

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS