SMAPS безымянный сегмент памяти - PullRequest
2 голосов
/ 07 мая 2010

Я не знаю, правильный ли это форум, чтобы задавать этот вопрос, но я фанат stackoverflow и поэтому решил продолжить размещать его здесь.

Если я вывожу / proc // smaps, я найду несколько сегментов, с которыми не связано ни одно имя, а также с номером инода равным 0. Согласно документации ядра Linux, 0 указывает, что ни один инод не связан с область памяти, как в случае с BSS (неинициализированные данные).

Я пытался найти BSS, но не смог получить именно то, что есть. Информация, которую я получил, заключается в том, что BSS - это тот сегмент памяти, который отвечает за унитализованные глобальные и статические переменные.

Мой вопрос: что еще содержит область памяти с номером индекса 0?

Я написал программу на C, в которой я сделал следующее: - (i) Malloc 4 Мб для массива целых чисел (ii) Cat / proc // smaps (iii) Нашел в сегменте добавленный сегмент памяти с номером инода "0". (iv) Инициализировал некоторую часть этого массива до 5.

ЕЩЕ ОБНАРУЖИЛ, что этот сегмент памяти связан только с индексом 0. Другой вопрос: когда этот сегмент памяти преобразуется в кучу?

1 Ответ

2 голосов
/ 07 мая 2010

Отображения с индексом 0 являются анонимными отображениями - по сути, такими, которые были созданы с флагом MAP_ANONYMOUS для mmap().

Это просто означает, что они не связаны с дисковым файлом. Номер инода не изменится; для этого отображения он всегда будет оставаться равным 0.

Анонимные сопоставления не преобразуются в кучу. На самом деле «[куча]» - это просто удобный маркер для анонимного отображения, которое устанавливается ядром во время выполнения и изменяется системным вызовом brk().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...