програмата, върху която работя в момента, обработва голямо количество данни (>32GB). Поради "тръбопровода" обаче максимум около 600 MB присъстват в основната памет във всеки даден момент (проверих това, това работи по план).
Ако обаче програмата е приключила и аз се върна обратно към работното пространство с отворен Firefox, например (но също и други), отнема известно време, докато мога да я използвам отново (също така HDD е силно активен за известно време). Този факт ме кара да се чудя дали Linux (операционната система, която използвам) заменя други програми, докато моята програма работи и защо?
Имам инсталирани 4 GB RAM на моята машина и докато програмата ми е активна, тя никога не надвишава 2 GB използване.
Моята програма разпределя/освобождава само динамична памет само с два различни размера. 32 и 64 MB парчета. Написано е на C++ и аз използвам new и delete. Трябва ли Linux да не е достатъчно интелигентен, за да използва повторно тези блокове, след като ги освободя и оставя другата си памет недокосната?
Защо Linux изхвърля моите неща от паметта? Това някакъв друг ефект ли е, който не съм обмислил? Мога ли да заобиколя този проблем, без да пиша персонализирана система за управление на паметта?
new
иdelete
, за да прескочите внедряването на диспечера на купчината на компилатора, диспечерът на купчината на компилатора е този, който контролира вътрешната работа на това как вашето приложение взаимодейства с операционната система спрямо. управление на паметта, а не директноnew
иdelete
. - person PaulMcKenzie   schedule 17.03.2015new
иdelete
на библиотеката за изпълнение на C++, а не тази на компилатора. И най-вероятно библиотеката за изпълнение ще използва повторно блокове - ако не го направи, ще видите увеличение на използването на паметта! - person Mats Petersson   schedule 17.03.2015vmstat 1
, за да потвърдите вашите предположения. Обърнете внимание наsi
иso
колони, които са свързани с размяна на четене/запис. - person myaut   schedule 17.03.2015