3.12.1 方針 (私の見解)

行列もコンパイル時にサイズ (行の数、列の数) が分かっていて、 それらが小さければ、 2 次元配列で扱うのが簡単であろう。


そうでない場合、従来のCではとても悩ましかった。 C99 で導入された可変長配列の機能は、 行列のサイズが小さい場合には有効であろう。 特に従来からあった 「C には Fortran の整合配列の機能がないのでライブラリィが作りにくい」 という批判は、可変等配列の機能を利用することで解決出来る。 しかし、この可変長配列の機能は、 新しい C11 の規格ではオプションにされてしまった。 GCC と LLVM では相変わらず使えるようであるが、 この機能を使い続けるかどうかは難しい問題である。


一方、 数値計算に現れる大規模行列や2次元格子上の数値データなど、 大規模なデータを扱うには、可変長配列は不適当だと考える。 やはり大規模行列や2次元格子上の数値データは、 malloc() 等を使って動的に確保し、 ポインターを使って扱うのが適当であろう。


C++ が利用可能な場合、Eigen のようなベクトル、 行列を扱うためのクラス・ライブラリィが色々利用可能であるので、 C++ に乗り換えるのが良いかもしれない。



桂田 祐史