トップページ⇒tech
11コメント3KB

mmapとfseek

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
ファイルに対してランダムアクセスするときにどちらの方が高速ですか?
Win32ならmmapのかわりにCreateFileMappingで。
0002名無しさんNGNG
実装メモリーの量が響くだろうな。
いまどき512MBとか珍しくないからmmap。
0003デフォルトの名無しさんNGNG
fseekのが低レベルで面倒な分高速のような。
0004デフォルトの名無しさんNGNG
mmapの方が低レベルなきガするけどな。
VMの interfaceに地下そうだし。
0005デフォルトの名無しさんNGNG
VM = Visual Mind (M$)
0006デフォルトの名無しさんNGNG
fseekはファイルポインタが一つしか持てないけど、
mmapならいくつでも持てるぞ。というかファイルポインタないし。
つまり、複数スレッドから同時にアクセスするのにいいかもしれん。
そんな用途無いと思うけど。
0007デフォルトの名無しさんNGNG
MMap系統は、アクセス違反が起こって、OSが取って、メモリを割り付けて、
ファイルからよむ必要があるから、fseekとかよりは遅いはず。
ただ、DISKからの読み込みは、それより桁違いに遅いから、どーでもいいかと。
0008デフォルトの名無しさんNGNG
fseekするとバッファがフラッシュされてしまうから、複
数の領域を繰り返しアクセスするような場合だとmmapの方
が速そう。
0009デフォルトの名無しさんNGNG
昔DDJでクイックソート対決やってseekしたほうが速かったような
0010いつでもどこでも名無しさんNGNG
まあ、ドライバーと実装メモリとOSの差が
あるから一概にはいえんわな。でも
良いハードの性能をフルに出せるのはmmap
だと思う。
0011デフォルトの名無しさんNGNG
大量のデータをシーケンシャルに読み書きする場合、read(), write()
系は、ディスクデバイスからバッファキャッシュ、バッファキャッシュ
からユーザのメモリ空間と 2 回のメモリ転送が発生するから、mmap()
と比較するとバスにかかる負担が大きいし遅かったと思う。

とはいえ >>7 が言ってるのも一理あるし、そもそも fread() だと
カーネル内部のキャッシュに加えてユーザ空間でもキャッシュが入っ
てるわけで、状況はより複雑。実際にはアクセスパターンやデータ量、
ハードウェア構成、使っている VM の性能に左右される部分が大きく、
一概には言えないよ。

とりあえず、自分の用途に合わせてテスト用のコードを書いて試して
みれば? 性能を語るなら、まずはプロファイルを取るところからス
タートしないと。
■ このスレッドは過去ログ倉庫に格納されています