скорость new\delete
От: enji  
Дата: 13.02.10 13:21
Оценка:
Здравствуйте!

Я наткнулся на такой прикол со стандартными new\delete:

enum {Count = 100000 };
typedef std::vector<void*> TVector;
TVector alloc;

for (int i = 0; i < Count; ++i)
    alloc.push_back(new char[100]);

//std::random_shuffle(alloc.begin(), alloc.end());   // !!!!!!!!!!!!

for (TVector::iterator cur = alloc.begin(), end = alloc.end(); cur != end; ++cur)
    delete[] *cur;


Если раскоментить помеченную строку, то скорость работы что в debug, что в release увеличится в 10-15 раз (Windows XP, MSVC 2008)

Т.е. получается, что освобождение памяти в порядке получения сильно медленнее, чем удаление в случайном порядке. А почему?
... << RSDN@Home 1.2.0 alpha 4 rev. 1441>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.