Iは、ISO-C結合を使用して、FORTRANとCの間にいくつかのレガシーコードを架橋およびモジュール/インターフェースなどだFortran realがC floatと互換性があることを確認するにはどうすればよいですか?
通常、CにFortran配列を渡すとき私は別の配列にそれを単にコピーしたいです右iso-c結合型である。しかし、コードの中には、大きな(マルチGB)配列を渡す必要があるものがあります。この場合、コピーは分かりません。また、第三者コードから来ているため、Fortran配列のタイプを変更することはできませんreal(c_float)
しかし、私は例外をスローするのが喜んで、または基礎となるFortran配列がC浮動小数点ベースのAPIと互換性がない場合、コンパイルに失敗します。
デフォルトのreal
がコンパイル時(または実行時)にC float
またはdouble
と互換性があるかどうかを確認する方法はありますか?
私はintel FortranとCコンパイラを使用しています。
なぜマルチGBアレイをコピーするのが合理的ではないと思いますか?ターゲットとするハードウェアのタイプ – wallyk
@wallyk主に、私はすでにマシン上のメモリ制限に近いところで動いているからです。使用されているメモリにさらに4GBを追加することは、アプリケーションをダウンさせるか、スワップに私を押し込むことになります。どちらも受け入れられません。 –
Fortranコンパイラのマニュアルを見ることをお勧めします。しかし、yore(Fortran 77とも呼ばれる)の時代、REALは倍精度用の「REAL * 8」とは対照的に「REAL * 4」でした。それは倍精度ですか? - Fortran REALがC floatと同じである可能性は非常に高いです。そして、Fortran REALがCダブルであることが判明した場合は、コピーされていないアレイを使用することができますか?そうではありませんか? AFAICRでは、Cコードの配列を変更すると、Cのように呼び出し関数でも配列が変更されます。 –