0

通常のc/c++アプリケーションがファイルにアクセスする必要がある場合、ファイルのコンテンツをプロセスメモリに配置し、メモリ操作を使用して読み取りまたは変更するのが一般的であることをどこかで読みました。これは、メモリ マッピングまたは単にファイルのマッピングとして知られています。

(オンチップ) バッファーにデータをコピーし、必要に応じてコンテンツを変更してから、ファイルに書き戻す必要があるということですか? これを達成するための特定の機能はありますか?

これについて詳しく説明しているリンクを教えてもらえますか? 問題は、単語のメモリ マッピングが広すぎて、正確な情報を見つけることができないことです。

私はwindows-7、ビジュアルスタジオ2010に取り組んでいます

4

2 に答える 2

0

ファイルからデータをコピーする必要はありません。ファイルのメモリマッピングとは、ファイルを「開く」ために使用する関数が、そのファイルの内容を含むバッファを取得することを意味します。このバッファは、ファイルの内容がコピーされたRAMメモリではありませんが、アクセスがディスク上のファイルに直接マップされる仮想メモリです。Windowsでどのように機能するかはわかりませんが、Linuxではmmap()呼び出しが機能します。そのバッファを変更してファイルを閉じると、ディスクの内容が自動的に更新されます。

于 2012-10-06T06:51:24.653 に答える
0

いいえ、それはそれを意味するものではありません。あなたが説明することは悪い習慣でしょう。非常に悪い習慣。代わりに、メモリマッピングは、OSがファイルに対応することを認識している特別なポインタを作成し、そのポインタがメモリに書き込む(または実際にメモリに書き込む)代わりに、OSが配列としてアクセスされるたびに作成することを意味します。 )、ディスク上のファイルの内容をインプレースで変更します。システムがPOSIXに準拠している場合は、このmmap()関数を使用してファイルをメモリ領域/ポインタにマップできます。

int fd = open("/path/to/file.ext", O_RDWR);
struct stat st;
fstat(fd, &st);
uint8_t *byte_ptr = mmap(NULL, st.st_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);

// read a byte from the file
uint8_t byte = byte_ptr[12];
// increment it
byte++;
// and write it back
byte_ptr[12] = byte;

close(fd);
于 2012-10-06T06:53:10.920 に答える