|
April 21st, 2017
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
|
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) |
|
макака уже замутил стартап, набирает девелоперов по постам в фифе! |
|
|
LJ.Rossia.org |