Проверка того, указывает ли указатель C/C++ на постоянную память во время выполнения (в ОС Linux)Linux

Ответить
Anonymous
 Проверка того, указывает ли указатель C/C++ на постоянную память во время выполнения (в ОС Linux)

Сообщение Anonymous »


Раньше низкоуровневый код C/C++ определял, указывает ли указатель ptr на постоянную память в ОС Linux, выполнив: extern char etext, edata; ... (ptr > &etext) && (ptr < &edata); И на самом деле время от времени я до сих пор вижу это в действии.

Однако в ответах на вопрос, заданный кем-то еще в прошлом году (Почему вычитание значения etext из edata не дает мне правильный размер моего текстового сегмента), показано, что в настоящее время традиционная непрерывная структура памяти < код>текст -> данные -> bss -> куча -> ... -> стек -> ядро больше не гарантируется.

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

Этот ответ на немного другой вопрос предлагает следующее, чтобы проверить, находится ли указатель в памяти статических переменных, чтобы учесть тот факт, что в настоящее время порядок разделов памяти может быть произвольным:

(void*)(x) &etext) && (c < &edata) && (!inStack((void*)c)); } else if(&etext > &edata && &end > &edata) { return (void*)(c) (void*)&end && (void*)(c)
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»