あまりにも多くのRAMを必要とするプログラムのディスクI/O操作を実行したい。 私は倍精度の行列を使用し、バイトとしてのディスクへの書き込みが最も速い方法であると考えます(倍精度を維持する必要があります)。C++バイナリファイルからの倍数の書き込みと読み込み
移植性のある方法は?
私はこのコード(here)が見つかりましたが、著者は、それは可搬性でそれを行うにはどのように...
#include <iostream>
#include <fstream>
int main()
{
using namespace std;
ofstream ofs("atest.txt", ios::binary);
if (ofs) {
double pi = 3.14;
ofs.write(reinterpret_cast<char*>(&pi), sizeof pi);
// Close the file to unlock it
ofs.close();
// Use a new object so we don't have to worry
// about error states in the old object
ifstream ifs("atest.txt", ios::binary);
double read;
if (ifs) {
ifs.read(reinterpret_cast<char*>(&read), sizeof read);
cout << read << '\n';
}
}
return 0;
}
'sizeof(double)'はプラットフォームによって異なる可能性があるため、移植性がありません。これをチェックする必要がありますが、そうでなければサンプルコードはOKです。 – spraff
これは(特に組み込みハードウェアとやりとりしている場合に)変更される可能性が高いので、私は 'double'のバイトオーダーをもっと心配しています。 –
真実は、話をして「可能性」の面で考えるのは悪い習慣です。ポータビリティについて本当に気にしているのであれば、その程度はありません。 – spraff