0

我们可以在运行时通过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)需要页面大小的任何时候打电话。是否有一些解决方法或常见的解决方案是什么?

4

1 回答 1

3

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

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

于 2019-03-19T05:02:38.653 回答