steinkrauz - Фрагментация памяти

> Recent Entries
> Archive
> Friends
> User Info

April 21st, 2017


Previous Entry Add to Memories Tell A Friend Next Entry
10:33 pm - Фрагментация памяти
Навеяло дискуссией в бложике у Кетмара. Дескать, что будет, если мы начнём память дёргать туда-сюда тупо в лоб, не задумываясь о последствиях? Отсюда родилась тупенькая программа, которая это дело исследует. Алгоритм совершенно дубовый: читаем файл в массив строк, дальше треть этого массива рандомно заменяем рандомно сгенерированными строками, и повторяем это тыщщу раз, с новыми строками для каждого раза, естественно. А в процессе замеряем, сколько времени потребовалось в каждый подход потратить на выделение памяти.

[stk@testarch memfrag]$ ./memfrag -m c test.txt 
Char test selected
Total lines: 531
Max string length: 205
Allocation in load: 104ms
VM: 4256; RSS: 1268
Replace table has 177 entries
First ten allocations mean time: 35ms
Last ten allocations mean time: 39ms
Allocation time changes by 111%
VM: 9792.00; RSS: 8344.00


На маленьком файле вроде всё в порядке, ну память подросла, так и строки размером побольше могли вставиться, а по времени так вообще в пределах флюктуаций. Теперь берём файл побольше

[stk@testarch memfrag]$ ./memfrag -m c test2.txt 
Char test selected
Total lines: 3181
Max string length: 205
Allocation in load: 639ms
VM: 4520; RSS: 2856
Replace table has 1060 entries
First ten allocations mean time: 225ms
Last ten allocations mean time: 421ms
Allocation time changes by 186%
VM: 46360.00; RSS: 44920.00


И тут так внезапно объём памяти вырастает на порядок, а время на её выделение почти в два раза. У-у-у-пс. Это чистые плюсы без излишеств, только выделение памяти под массивы.
А теперь попробуем то же самое, но с контейнером и строками из STL:
[stk@testarch memfrag]$ ./memfrag -m s test2.txt 
String test selected
Total lines: 3181
Max string length: 205
Allocation in load: 799ms
VM: 4572; RSS: 2988
Replace table has 1060 entries
First ten allocations mean time: 254ms
Last ten allocations mean time: 160ms
Allocation time changes by 62%
VM: 6156.00; RSS: 4820.00


А у них внезапно и с памятью, и со скоростью всё более, чем нормально. Но как говорится, и на старуху найдётся проруха: если вместо 1000 пустить 1300 итераций, что-то в аллокаторе всё-таки ломается.
First ten allocations mean time: 217ms
Last ten allocations mean time: 1341ms
Allocation time changes by 617%
VM: 6156.00; RSS: 4728.00


Если кто хочет сам поиграться, прога лежит на Bitbucket: https://bitbucket.org/steinkrauz/memfrag

(5 comments | Leave a comment)

Comments:


From:(Anonymous)
Date:April 21st, 2017 - 10:24 pm
(Link)
дискуссии у пидмара: как правильно зарабатывать деньги
From:(Anonymous)
Date:April 21st, 2017 - 10:24 pm
(Link)
(все камменты стёрты)
From:(Anonymous)
Date:April 22nd, 2017 - 01:21 am
(Link)
и правильно, надо сидеть на шее у мамки
потом к косыряке переедет, косыряка кетмаря потянет лехко
From:(Anonymous)
Date:April 22nd, 2017 - 08:25 am
(Link)
>на шее у макаки
From:(Anonymous)
Date:April 22nd, 2017 - 01:17 pm
(Link)
макака уже замутил стартап, набирает девелоперов по постам в фифе!

> Go to Top
LJ.Rossia.org