Sergei Olonichev wrote: > Aleksey Cheusov wrote: > >>Sergei Olonichev <[EMAIL PROTECTED]> writes: >> >> >> >>>Привет Всем! >>> >>>Вот какой вопрос: >>> >>>У меня есть файл размером больше 4G. И есть приложение которое иногда >>>читает этот файл по разным смещениям - как правило не более 50k. >>>Причем одни смещения используются значительно чаще чем другие (а >>>большинство возможных смещений не используется вообще). >>> >>>Мне бы хотелось максимально ускорить этот процесс чтения. >>> >>>Очевидно что использовать mmap на весь файл не получится. >>> >>> >>Это почему это? >> >> > > потомучто указатель как был 32 bit так и остался как __off_t не определяй > void * ptr = mmap (...);
А зачем вам больше? 32 бита вполне хватит для Ваших 50k. Если воспользоватся mmap64 (там offset 64 бита), соответственно передаем в последний параметр число 4 294 967 297ю Указатель который вернёт mmap64 (ptr) указывает на 4 294 967 297 байт в файле, а (char*)ptr+50000 указывает на 4294967297+50000 байт в вашем файле. > > > Тут у меня мысль появилась вот какая - я в этом файле все данные > пересортирую таким образом чтобы те блоки куда обращенее происходит чаще > всего находились вначале файла - друг за другом. > И отображать в память буду только первые N - блоков - так чтобы размер > отбражения не превосходил какою-то константу. > > Работа ускорится - плохо только что будет смесь из fred и *ptr > > >>0,~>echo '#include <sys/mman.h>' | cpp -D_FILE_OFFSET_BITS=64 >>-D_LARGEFILE_SOURC> typedef long int __off_t; >>typedef __quad_t __loff_t; >>typedef __loff_t __off64_t; >>typedef __off64_t off_t; >>0 0 0,~> >> >> >> >>>Есть ли >>>смысл использовать mmap (c точки зрения производительности) перед >>>непосредственным чтением определенного куска (те на ~50k) или нет? >>> >>> >>Не перед, а вместо. >> >> >>