Преимущества и недостатки vm.overcommit_memory=1 по сравнению с vm.overcommit_memory=0
В Linux, еслиvm.overcommit_memory=1
, вы можете выделить огромные блоки памяти, но если вы используете меньше, это не повлияет на использование памяти.
Предположим, следующий код:
const size_t size = 128;
void p = malloc(size);
process(p, size); // use up to size bytes
против
const size_t HUGE_SIZE = 1ull * 1024ull * 1024ull * 1024ull; // 1 GB
const size_t size = 128;
void p = malloc(HUGE_SIZE);
process(p, size); // use up to size bytes
использование памяти в обоих случаях будет «похожим» (хорошо, может быть 4 КБ во втором случае против 128 байт в первом случае)
- второй подход действительно занимает 4 КБ?
- второй подход медленнее?
- а если у меня несколько 1000 блоков по 1 Гб?
что, если я часто выделяю/освобождаю эти несколько тысячных блоков? - больше недостатков я не вижу?
- Я читал, что MacOS поддерживает то же самое, есть ли разница?