Почему так?
От: TailWind  
Дата: 12.09.21 18:35
Оценка:
Читаю файл
Последовательно
Для каждого чтения выделяю буфер размера Buf_Size с помощью vector<UCHAR> vbuf(Buf_Size);

Закомментировал чтение файла
Оставил только выделение памяти

И удивился что, при размере буфера 0x80000 стало дольше работать
Почему?

Если заменяю vector на:
void *buf = malloc(Buf_Size); free(buf);
работает моментально
Почему?

vector каждый UCHAR прописывает нулём в цикле?


File_Size 0x450000000

Buf_Size 0x8000      Time: 5969 ms
Buf_Size 0x10000     Time: 5937 ms
Buf_Size 0x20000     Time: 5907 ms
Buf_Size 0x40000     Time: 5890 ms

Buf_Size 0x80000     Time: 8766 ms <<<<<<<<<<
Buf_Size 0x100000    Time: 8703 ms
Buf_Size 0x200000    Time: 8578 ms
Buf_Size 0x400000    Time: 8594 ms
Buf_Size 0x800000    Time: 8609 ms
Buf_Size 0x1000000   Time: 8672 ms
Buf_Size 0x2000000   Time: 8672 ms
Buf_Size 0x4000000   Time: 8656 ms
Buf_Size 0x8000000   Time: 8641 ms
Buf_Size 0x10000000  Time: 8593 ms
Buf_Size 0x20000000  Time: 8688 ms
Buf_Size 0x40000000  Time: 8906 ms


Код:

INT64 File_Size = 0x450000000;
//
Log->printf(L"File_Size 0x%I64x\n\n", File_Size);
//
for (ULONG Buf_Size = 0x8000; ; Buf_Size*=2)
{
  Log->printf(L"Buf_Size 0x%-8x  ", Buf_Size);
  //
  TMFS_Win32_Timer Timer;
  //
  for (INT64 p=0; p<File_Size; p+=Buf_Size)
  {
    vector<UCHAR> vbuf(Buf_Size);
    //
    //void *buf = malloc(Buf_Size);  if (buf == NULL) throw TMFS_Exception(L"malloc fail");  free(buf);
    //
    //fr->Read(&vbuf[0], Buf_Size);
  }
  //
  Timer.Report(Log);
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.