FC2ブログ
新カテゴリ追加! ~読書感想文たち~

free_122041 こんにちは!私のブログに新しいカテゴリを追加したのでご紹介します。普段SF小説とか科学系の教養本とか専門書とかいろいろ本を読むのですが、読みっぱなしの感が否めないので、せっかくならブログに感想とかをまとめようかと思い、このカテゴリを追加しました。いろいろな本を私の感想とともにご紹介していこうと思いますのでよろしくお願いします!

スポンサーサイト



テーマ:読書感想 - ジャンル:本・雑誌

[2014/07/28 18:45] | 読書感想文たち(SFとか) | トラックバック(0) | コメント(0) | page top
値渡しと参照渡し ~2つの大きな違い~

 こんにちは!最近画像処理関係のプログラムを書くことが多い管理人です。とあるプログラムの内部の関数に双線型補間を実装しなければならず、その時にタイトルのところを間違えていたせいで実行時間に大きな差が出てしまっていたので、今回はそれについて紹介しようと思います。

前提知識

 今回は双線型補間を行う関数の実装時に出会ったトラブルということで、それらについて興味がある人のために、参考になるURLをここに貼っておこうと思います。

詠み人知らずの備忘録 ~回転した画像をバイリニア補間する~

詠み人知らずの備忘録 ~画像を回転させる際の画素を補間するコード~

 また、値渡しと参照渡しとは何かについて詳細を知りたい方は以下のページが参考になると思います。

Rubyist Magazine ~値渡しと参照渡しの違いを理解する~

どこで困ったか

 では本章で、私が値渡しと参照渡しを間違えていたせいで、どのように困ったかを書いていこうと思います。
 最初は前章にリンクを貼ったページの中にあるバイリニア補間 (双線形補間) のコードを自分の開発しているソフトウェアに合わせて関数で実装しようとしました。その時に、その関数の引数として画像の配列を渡すようにしていました。いざそのコードを実行してみると、1枚の画像に、自分の行いたい処理をかけるだけで、1分程度かかってしまいます^^;
 どこが処理のネックになっているか調べたところ、どうもバイリニア補間を行う関数が処理時間を食っているようでした。引数として渡している画像は512x512程度の大きさで大したサイズではないし、双線形補間として行っている計算も大したこと無いのになぜだろうと思っていました。

原因と解決策

 原因は、引数として渡す画像配列を、参照ではなく値として渡していたためでした。参照ではなく値として渡してしまうと、引数を渡すたびに引数のコピーをまるごと作らねばならず、引数がある程度の大きさのものだと、処理に時間がかかってしまいます。今まで値渡しと参照渡しの違いはわかっていたのですが、処理速度の違いとして問題を感じたことはありませんでした。この部分を改善することで1分程度かかっていた処理が1秒もかからず終わるようになりました笑 今度からは気をつけようと思います!

テーマ:プログラミング - ジャンル:コンピュータ

[2014/07/26 21:12] | プログラミング全般 | トラックバック(0) | コメント(0) | page top
| ホーム |