Gポイントポイ活 Amazon Yahoo 楽天

無料ホームページ 楽天モバイル[UNLIMITが今なら1円] 海外格安航空券 海外旅行保険が無料!

log

2008.10.09 考察:インタプリタについて

ARToolKitを勉強する以前に、僕が高校のときに
挫折したC言語のポインタ変数について
ポインタ虎の巻さんのサイトで少し勉強していたら、
インタプリタについても記述されていたのでメモ。

インタプリタは通常C言語のようなコンパイラ型言語よりも
処理速度が遅いっていわれていて、なぜそうなのか
今までよく分からなかったんだけど、虎の巻によれば
インタプリタでの変数の値は、変数名と対応したデータベースに
格納されて、その変数への参照があったときに、一度データベースから
変数名をキーとして検索してから、その値を使って演算処理を行うらしいです。
(なぜデータベース化する必要があるのかは分かりませんけど)

ということは、データベース化したり、データベースを一度
参照するといった処理が、変数を扱うごとにコンパイラ型
よりも増えてしまって、全体の処理速度が落ちるってことなんですねー。

けど、最新のHSP Ver3.2β1については従来よりも
20%も演算処理があがってるそうなのであまり
インタプリタっていうデメリットも無く扱えるように
なってるんじゃないかという気はします。

comment

たけなか 2008.10.09-15:56 Edit

とりあえず、勉強したことのまとめ。

・変数に&をつけると、”その変数のアドレス”を表す。
 ポインタに*をつけると、そのポインタの示す格納場所の内容を表す。
・配列宣言をしたときは、配列はそのままポインタであると解釈される。
・関数の引数に文字列や配列を用いる場合は基本的にポインタを用い、
 「参照渡し」と呼ばれる。→関数内で値が変更された場合、
 上の関数でも変更される。
 関数の引数に変数の値を用いる場合は「値渡し」と呼ばれる。
 →関数内で値が変更されても、上の関数での値は変更されない。
・基本的には関数呼び出しの場合は&にしてアドレスを渡し、
 関数の引数では*にしてそのアドレスの内容が渡されるようにする。
・struct構造体内部でstruct変数を用いた場合、内部のstructは現実には
 ポインタであるため、以下のような記述が可能。
struct List {
int data;
struct List *next;
};
・構造体の場合、間接参照はアロー演算子'->'によって行われる。
 これは間接参照演算子'*'の優先順位が低いために、構造体ポインタl の
 メンバーdata を参照するのに、*l.data だと、l.data がポインタで
 あると解釈されて、意味論的エラーになるため。
 実質的には (*l).data と l->data の間には区別はない。