comparison nobu-graduation.tex @ 1:fc26e9b8551f

modify tex
author Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
date Fri, 18 Nov 2011 07:45:29 +0900
parents 857b03a6ff06
children a729fd12d13f
comparison
equal deleted inserted replaced
0:857b03a6ff06 1:fc26e9b8551f
131 %ここで問題となるのが、関数の宣言を全て読んだ後にハッシュテーブルに追加されるということである。 131 %ここで問題となるのが、関数の宣言を全て読んだ後にハッシュテーブルに追加されるということである。
132 %その為、関数の引数に自身の関数名がでるとそのような関数はないとエラーにされてしまう。 132 %その為、関数の引数に自身の関数名がでるとそのような関数はないとエラーにされてしまう。
133 %そこで typedefrec の付いた関数は先行して宣言を行うことにする。 133 %そこで typedefrec の付いた関数は先行して宣言を行うことにする。
134 %すると、宣言中でもハッシュテーブルから関数の情報をとることができるようになる。 134 %すると、宣言中でもハッシュテーブルから関数の情報をとることができるようになる。
135 135
136 \subsection{\_\_return 変数} 136 %\subsection{\_\_return 変数}
137 \subsection{環境付き継続}
137 CbC では通常の C の関数からコードセグメントに継続する際、 138 CbC では通常の C の関数からコードセグメントに継続する際、
138 元の C の関数に処理を戻すことがように \_\_return 変数が用意してある。 139 元の C の関数に処理を戻すことがように環境付き継続を実装してある。
139 \_\_return 変数は参照した関数のアドレスを覚えておく変数である。 140 環境付き継続は \_\_return 変数を参照することで用いることができる。
140 コードセグメントの継続の際に引数で渡して扱う。 141 \_\_return 変数は参照されると、参照した関数のアドレスを覚えておく。
141 引数として渡された \_\_return 変数をコードセグメントとして使うことで C の関数に戻る。 142 コードセグメントの継続の際に引数に \_\_return 変数を渡すことで、
143 関数の呼び出し元のアドレスも渡すことができる。
144 後は引数として渡されたきたアドレスへ飛ぶことでいつでも C の関数に戻ることができる。
142 145
143 \subsubsection{\_\_return 変数の問題} 146 \subsubsection{\_\_return 変数の問題}
144 しかし現在この \_\_return の値は static で実装されている。 147 しかし現在この \_\_return の値は static で実装されている。
145 これではスレッドセーフであるとは言えない。 148 これではスレッドセーフであるとは言えない。
146 マルチスレッドで\_\_returnを扱うと、元の関数に戻る前に \_\_return の値が書き換えられる可能性があるからである。 149 マルチスレッドで\_\_returnを扱うと、元の関数に戻る前に \_\_return の値が書き換えられる可能性があるからである。