5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

mmapとfseek

1 :デフォルトの名無しさん:2001/08/13(月) 20:54
ファイルに対してランダムアクセスするときにどちらの方が高速ですか?
Win32ならmmapのかわりにCreateFileMappingで。

2 :名無しさん:2001/08/13(月) 21:04
実装メモリーの量が響くだろうな。
いまどき512MBとか珍しくないからmmap。

3 :デフォルトの名無しさん:2001/08/13(月) 23:10
fseekのが低レベルで面倒な分高速のような。

4 :デフォルトの名無しさん:2001/08/13(月) 23:31
mmapの方が低レベルなきガするけどな。
VMの interfaceに地下そうだし。

5 :デフォルトの名無しさん:2001/08/13(月) 23:33
VM = Visual Mind (M$)

6 :デフォルトの名無しさん:2001/08/14(火) 08:25
fseekはファイルポインタが一つしか持てないけど、
mmapならいくつでも持てるぞ。というかファイルポインタないし。
つまり、複数スレッドから同時にアクセスするのにいいかもしれん。
そんな用途無いと思うけど。

7 :デフォルトの名無しさん:2001/08/15(水) 17:12
MMap系統は、アクセス違反が起こって、OSが取って、メモリを割り付けて、
ファイルからよむ必要があるから、fseekとかよりは遅いはず。
ただ、DISKからの読み込みは、それより桁違いに遅いから、どーでもいいかと。

8 :デフォルトの名無しさん:2001/08/16(木) 00:41
fseekするとバッファがフラッシュされてしまうから、複
数の領域を繰り返しアクセスするような場合だとmmapの方
が速そう。

9 :デフォルトの名無しさん:2001/08/16(木) 00:56
昔DDJでクイックソート対決やってseekしたほうが速かったような

10 :いつでもどこでも名無しさん:2001/08/16(木) 00:59
まあ、ドライバーと実装メモリとOSの差が
あるから一概にはいえんわな。でも
良いハードの性能をフルに出せるのはmmap
だと思う。

11 :デフォルトの名無しさん:2001/08/16(木) 01:08
大量のデータをシーケンシャルに読み書きする場合、read(), write()
系は、ディスクデバイスからバッファキャッシュ、バッファキャッシュ
からユーザのメモリ空間と 2 回のメモリ転送が発生するから、mmap()
と比較するとバスにかかる負担が大きいし遅かったと思う。

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

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

3 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)