История изменений
Исправление alysnix, (текущая версия) :
Так мерял:
надо просто брать обычные массивы, а не векторы. и ручками считать индекс для скорости. еще непонятно какой код будет сгенерен для этих back, pop_back и все такое.
malloc всегда будет дольше захвата из пула, и не раза в два-три, а побольше(впрочем зависит от реализации хип менеджера)…
в реальной ситуации, когда память уже фрагментирована, а хипменеджер ведет списки свободной памяти, и у него есть своя стратегия отдачи свободного блока, обычно по принципу - наиболее подходит по размеру, там правда хипменеджеры могут вести подсписки памяти, типа - свободные от 4 до 8 кб, свободные от 8 до 16кб и так далее, чтобы быстрее искать.
отдача(free) тоже медленная, поскольку надо еще проверить на слияние отдаваемого куска с предыдушим и следующим, если они свободны, то сливать в большой свободный кусок - чтобы избегать фрагментирования.
то что вы намеряли (2-3 раза) - это сильно похоже, что у хипменеджера еще вообще нет списков свободной памяти, вы же не отдавали ничего туда, и он отдает сразу из большого своего свободного единственного куска.
так что мерять так вообще не стоит. хипменеджер в общем случае работает на порядок медленнее чем из пула заранее аллокированных отдавать.
либо сначала рандомно нахватайте кусков тыщ 10, потом рандомно половину освободите - чтобы там списки свободной памяти появились, а потом пускайте тесты для malloc. то есть у вас должен быть пул памяти фрагментрован, чтобы тесты malloc пускать.
аналогично тесты для free выглядят(на дефрагментации надо). free по идее даже дольше malloc должен быть, поскольку там работы больше.
Исправление alysnix, :
Так мерял:
надо просто брать обычные массивы, а не векторы. и ручками считать индекс для скорости. еще непонятно какой код будет сгенерен для этих back, pop_back и все такое.
malloc всегда будет дольше захвата из пула, и не раза в два-три, а побольше(впрочем зависит от реализации хип менеджера)…
в реальной ситуации, когда память уже фрагментирована, а хипменеджер ведет списки свободной памяти, и у него есть своя стратегия отдачи свободного блока, обычно по принципу - наиболее подходит по размеру, там правда хипменеджеры могут вести подсписки памяти, типа - свободные от 4 до 8 кб, свободные от 8 до 16кб и так далее, чтобы быстрее искать.
отдача тоже медленная, поскольку надо еще проверить на слияние отдаваемого куска с предыдушим и следующим, если они свободны, то сливать в большой свободный кусок - чтобы избегать фрагментирования.
то что вы намеряли (2-3 раза) - это сильно похоже, что у хипменеджера еще вообще нет списков свободной памяти, вы же не отдавали ничего туда, и он отдает сразу из большого своего свободного единственного куска.
так что мерять так вообще не стоит. хипменеджер в общем случае работает на порядок медленнее чем из пула заранее аллокированных отдавать.
либо сначала рандомно нахватайте кусков тыщ 10, потом рандомно половину освободите - чтобы там списки свободной памяти появились, а потом пускайте тесты для malloc. то есть у вас должен быть пул памяти фрагментрован, чтобы тесты malloc пускать.
аналогично тесты для free выглядят(на дефрагментации надо). free по идее даже дольше malloc должен быть, поскольку там работы больше.
Исходная версия alysnix, :
Так мерял:
надо просто брать обычные массивы, а не векторы. и ручками считать индекс для скорости. еще непонятно какой код будет сгенерен для этих back, pop_back и все такое.
malloc всегда будет дольше захвата из пула, и не раза в два-три, а побольше(впрочем зависит от реализации хип менеджера)…
в реальной ситуации, когда память уже фрагментирована, а хипменеджер ведет списки свободной памяти, и у него есть своя стратегия отдачи свободного блока, обычно по принципу - наиболее подходит по размеру, там правда хипменеджеры могут вести подсписки памяти, типа - свободные от 4 до 8 кб, свободные от 8 до 16кб и так далее, чтобы быстрее искать.
отдача тоже медленная, поскольку надо еще проверить на слияние отдаваемого куска с предыдушим и следующим, если они свободны, то сливать в большой свободный кусок - чтобы избегать фрагментирования.
то что вы намеряли (2-3 раза) - это сильно похоже, что у хипменеджера еще вообще нет списков свободной памяти, вы же не отдавали ничего туда, и он отдает сразу из большого своего свободного единственного куска.
так что мерять так вообще не стоит. хипменеджер в общем случае работает на порядок медленнее чем из пула заранее аллокированных отдавать.
либо сначала рандомно нахватайте кусков тыщ 10, потом рандомно половину освободите - чтобы там списки свободной памяти появились, а потом пускайте тесты для malloc. то есть у вас должен быть пул памяти фрагментрован, чтобы тесты malloc пускать.