Мне интересно, почему мое приложение замедляет доступ к памяти, даже если распределение прошло успешно.
Возможно, потому что Linux фактически не будет поддерживать виртуальное распределение с физическими страницами, пока вынапиши им.Таким образом, хотя ваш malloc () завершается успешно, он действительно обновляет таблицы страниц только до тех пор, пока вы фактически не используете эту память.
Если посмотреть на ваш дамп meminfo выше, я думаю, что в системе свободно около 50 МБ:
MemFree: 50812 КБ
Кроме того, в качестве кэша используется около 22 МБ:
Кэшировано: 22684 КБ
Интересно, может ли ваше приложение, использующее более 30 МБ памяти, поднять виртуальную машину ядра до такой степени, что оно решит начать освобождать кэшированные данные.Если это произойдет, вы можете ожидать замедления, если, например, буферы файловой системы, которые вы, возможно, использовали, были сброшены из кэша.
Я отмечаю, что у вас не включен swap (SwapTotal равен 0 КБ).Если бы вы это сделали, ваше приложение могло вызывать перебои в работе виртуальной машины.
Если бы вы пытались отлаживать это, я бы попытался запустить "top", когда мое приложение достигло точки использования памяти 30 МБ и проверил, есть ли какое-либо ядро.темы внезапно становятся более занятыми.Я также использовал бы «vmstat» для отслеживания системного ввода-вывода и распределения кеша / буфера памяти.Наконец, я попробую немного покопаться в файловой системе / proc, чтобы посмотреть, сможете ли вы там что-нибудь почерпнуть (например, стоит посмотреть / proc / sys / vm).