Önce bir dosya oluşturmak: Ben kullanırsanızYığın bellekte memcpy neden yığın belleğe göre çok daha hızlı? aşağıdaki gibi
clock_t start = clock();
event_data stack_buffer;
event_data* heap_buffer = new event_data();
for(int j=0; j<10000; j++)
{
boost::iostreams::mapped_file mmap("C:\\test.bin", boost::iostreams::mapped_file::readonly);
const char* data = mmap.const_data();
for(int i=0; i<100000; i++)
{
const event_data* evt = reinterpret_cast<const event_data*>(data) + i;
// Use memcpy to copy data to buffer, either (1) or (2)
// memcpy(&stack_buffer, evt, sizeof(event_data)); <== (1)
// memcpy(heap_buffer, evt, sizeof(event_data)); <== (2)
}
}
clock_t end = clock();
printf("%f sec\n", (double) (end - start)/CLOCKS_PER_SEC);
(1), bu yazdırır: Bundan sonra
struct event_data
{
uint32_t data_1;
uint32_t data_2;
uint32_t data_3;
uint32_t data_4;
uint32_t data_5;
uint32_t data_6;
uint32_t data_7;
uint32_t data_8;
};
FILE* fp = fopen("C:\\test.bin", "w+b");
for(int i=0; i<100000; i++)
{
event_data data;
fwrite(&data, sizeof(event_data), 1, fp);
}
fclose(fp);
Ben dosyadan veri okumak için Boost bellek haritalı dosyayı kullanmaya çalıştı ~ 0,56 sn. Eğer (2) kullanırsam, ~ '26 .6 sn 'yazdırır. Sonuçlar neden bu kadar farklı?
C veya C++? Ayrı dillerdir –
VS2008'de Win32 Console projesi oluşturdum. C++ olmalı, sanırım –
@AnttiHaapala lütfen açıklayabilir misiniz? –