Как найти размер блока виртуальной памяти в Unix

У меня есть программа, которая выделяет 4096 байт (4 КБ) в цикле, и после 4-й итерации, я вижу, что размер виртуальной памяти увеличивается на 16 КБ. Таким образом, это означает, что размер блока составляет 16 КБ. Что такое команда unix, чтобы найти это? Я могу использовать getconf PAGE_SIZE, чтобы получить размер страницы 4 КБ, но мне нужно найти размер блока.

0

Решение

Предполагая, что вы используете glibc в обычной конфигурации я бы ожидал, что объем вашей памяти увеличивается на 4 КБ за раз. Но, возможно, инструмент, который вы используете для просмотра размера, недостаточно детализирован, чтобы показать вам такую ​​маленькую разницу?

Очевидно, что ваш glibc может быть настроен не так, как источник, который у меня есть, но он выделяется (через sbrkкоторый в свою очередь вызывает системный вызов brk) размер блока, который вы просили, округленный до 4 КБ (точный источник: size = (size + pagemask) & ~pagemask;вскоре последовало if (size > 0) brk = (char*)(MORECORE(size));,

Конечно, если вы делаете x = malloc(4096);фактическое выделение будет небольшим числом байтов, превышающим 4 КБ, так как malloc нужны некоторые дополнительные данные для отслеживания самого выделения (например, какой размер текущего выделения, какой размер предыдущего выделения). Общая служебная нагрузка составляет не менее 2 * sizeof (size_t) + 2 * sizeof (некоторый указатель) = 16 байт в 32-разрядной системе, 32 байта в 64-разрядной системе. Это может быть больше, чем это.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]