Как получить верхний и нижний пределы области глобальных данных в C? - PullRequest
3 голосов
/ 05 марта 2010

Я делаю сборщик мусора, чтобы понять, как они работают.

Я могу обрабатывать регистры, а также память кучи и стека, чтобы найти потенциальные ссылки на выделенные блоки.

Но обработка глобальной памяти данных ускользнула от меня.

Есть ли способ получить верхнюю и нижнюю границы глобального пространства памяти в C (я использую GCC на Intel OS-X, если это поможет)?

Какие еще области памяти я мог пропустить?

Ответы [ 2 ]

4 голосов
/ 05 марта 2010

Я не могу дать вам прямой ответ, но могу сказать, что Boehm / Demers / Weiser консервативный сборщик мусора будет иметь код (и, вероятно, документы), чтобы показать вам. Однако это будет зависеть от платформы.

1 голос
/ 05 марта 2010

Если я правильно понимаю, вы хотите знать, указывает ли указатель p на глобальную область данных программы.

Решение будет зависеть от платформы, также нулевые инициализированные данные и статически инициализированные данные, вероятно, находятся в разных местах. В C нет ничего, что указывало бы на то, что эти зоны должны существовать вообще, не говоря уже о том, что они являются смежными или не находятся в одном диапазоне с кучей или даже между функциями.

Вы хотите иметь глобальный символ в начале и один в конце и использовать их ссылку для проверки диапазонов. Для этого вам нужно разобраться с компоновщиком.

Перед этим убедитесь, что библиотека C не экспортирует такие данные, даже если предполагается, что они предназначены только для внутреннего потребления.

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