Можно ли сохранить page_size в объект со статической продолжительностью хранения? - PullRequest
0 голосов
/ 19 марта 2019

Мы можем извлечь page_size во время выполнения через sysconf(_SC_PAGESIZE). Моим первым намерением было поместить это значение при запуске программы в объект со статической продолжительностью хранения. Поэтому я намеревался объявить некоторую переменную extern в области видимости файла следующим образом

extern const size_t page_size;

Но когда я пытаюсь определить его где-то еще в области видимости файла как

const size_t page_size = (const size_t) sysconf(_SC_PAGESIZE);

не компилируется. И это кажется очевидным, поскольку 6.7.9(p4):

Все выражения в инициализаторе для объекта, который имеет статический или продолжительность хранения потока должна быть константным выражением или строкой литералы.

Я не хотел бы звонить на sysconf(_SC_PAGESIZE) всякий раз, когда мне нужен размер страницы. Есть ли какое-то решение для этого или какое общее решение?

1 Ответ

3 голосов
/ 19 марта 2019

sysconf(_SC_PAGESIZE) - это вызов функции. Он всегда будет возвращать одно и то же значение, но это все еще вызов функции, поэтому его нельзя использовать для инициализации глобальной переменной в C.

Если вы хотите избежать повторного вызова этой функции, вы можете объявить глобальную переменную как не-const и присвоить ее значение во время запуска приложения.

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