是否可以将 page_size 存储到具有静态存储持续时间的对象中?

Is it possible to store page_size into an object with static storage duration?

我们可以通过sysconf(_SC_PAGESIZE)在运行时提取page_size。我的第一个意图是将程序启动时的这个值放入一个具有静态存储持续时间的对象中。所以我的意图是在文件范围内声明一些 extern 变量,如下所示

extern const size_t page_size;

但是当我尝试在文件范围内的其他地方将它定义为

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

它不编译。这似乎很清楚,因为 6.7.9(p4):

All the expressions in an initializer for an object that has static or thread storage duration shall be constant expressions or string literals.

我不想在任何需要页面大小时调用 sysconf(_SC_PAGESIZE)。是否有一些解决方法或常见的解决方案是什么?

sysconf(_SC_PAGESIZE) 是一个函数调用。它总是return相同的值,但它仍然是一个函数调用,所以它不能用于初始化C中的全局变量。

如果您想避免重复调用该函数,您可以将全局变量声明为非const,并在应用程序启动期间为其赋值。