Код: Выделить всё
└───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ 21.17M rw-p 45.42M 45.11M 0K 0K rd wr mr mw me ac sd [heap] │
│---------------------------------------------------------------------------------------------------------------------------│
│ 66.59M 45.42M 45.11M 0K 0K │
└───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ 3.50G rw-p 21.50M 12.00M 0K 0K rd wr mr mw me ac sd │
│ ---p 320.00M 0K 0K 0K mr mw me nr sd │
│ rw-p 115.00M 74.63M 0K 0K rd wr mr mw me ac sd │
│ ---p 55.50M 0K 0K 0K mr mw me nr sd │
│ rw-p 2.25M 2.12M 0K 0K rd wr mr mw me ac sd │
│ ---p 1021.75M 0K 0K 0K mr mw me nr sd │
│---------------------------------------------------------------------------------------------------------------------------│
│ 5.00G 1.50G 88.75M 0K 0K │
└───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
Выше вы можете видеть, что [куча ] основного потока начинается с адреса 21,17 МБ и заканчивается по адресу 66,59 МБ (поскольку его размер составляет 45 МБ). Однако следующая статистика VMA находится по адресу 3,50 ГБ. Это означает, что если основная куча попытается превысить размер 3,50 ГБ, она будет конфликтовать со следующей VMA, что удивительно, поскольку 3,50 ГБ на самом деле не такой уж большой разрыв (он большой, да, но не безумно большой). По сути, это устанавливает жесткое ограничение на размер кучи для этого конкретного процесса.
У нас есть пара процессов, которые по ряду устаревших причин занимают около 2 ГБ каждый при запуске программы, поскольку у нас есть независимо выделить около 2 миллионов объектов по несколько килобайт каждый без каких-либо вызовов mmap.
Какие гарантии предоставляет ядро в отношении объема пространства, предоставляемого для основная куча, чтобы свободно расти? Если я заметил, что ядро выделяет VMA по адресу ~3 ГБ, что мешает ему выделить его по адресу 500 МБ? Я предполагаю, что под кучей должно быть гарантировано минимальное пространство, чтобы она могла достаточно вырасти.
Подробнее здесь: https://stackoverflow.com/questions/791 ... ximum-size
Мобильная версия