首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >meminfo_proc_show()的枚举在哪里,si_meminfo()的变量在哪里?

meminfo_proc_show()的枚举在哪里,si_meminfo()的变量在哪里?
EN

Stack Overflow用户
提问于 2018-01-31 20:33:41
回答 1查看 319关注 0票数 1

我不是一个开发人员,但我理解一些C概念。但是,我很难找到显示()中的枚举(例如显示()等)和meminfo()中的变量(例如totalram_pages等)是在哪里设置的。

例如,我所说的set就是NR_LRU_LISTS = 324077。我所理解的是,LRU_ACTIVE_FILE等于3,但是在NR_LRU_LISTS前面没有=操作符,所以必须在其他地方设置它。

我点击了枚举/变量来查看它们可能被调用的位置,但是要么是太多的无关引用,要么是非定义引用。

最后一件事是我没有意识到什么,但是什么?

老实说,我的目标是确定如何计算/proc/meminfo的值。

但是,这里我的问题是:这些枚举和变量是在哪里设置的?

更新1

枚举部分现在解决了,NR_LRU_LISTS等于5

totalram_pages部分似乎更难找出.

EN

回答 1

Stack Overflow用户

发布于 2018-01-31 20:52:13

您询问的常量是使用C的"枚举“特性定义的。

代码语言:javascript
复制
enum Foo { A = 4, B, C };

声明名为ABC的常量,其值分别为4、5和6。

没有初始化器的每个常量被设置为比前一个常量多一个。如果enum声明中的第一个常量没有初始化器,则将其设置为零。

您正在询问的变量是在文件范围(即任何函数之外)使用任何初始化器定义的。例如,totalram_pages被定义为page_alloc.c,带有一个公共声明,供在整个内核linux/mm.h中使用。因为它们是在文件范围内定义的,并且没有初始化器,所以它们在程序开始时被初始化为零。(这与在没有初始化器的函数中定义的变量有很大的不同。从“不确定”的值开始,阅读会引发未定义的行为。)

我不知道totalram_pages如何接收有意义的值。这段代码太复杂了,我现在不想追踪它。

听起来你似乎才刚开始学习C。学习别人的代码是一种很好的学习方法,但是你应该从简单的程序开始。Linux内核并不简单,因为它是一个操作系统内核,它还做了许多在其他程序中被认为是糟糕的样式或完全错误的事情。别从这开始。

..。也就是说,使用enum声明一组相关常量并让它们隐式地获取顺序值是完全正常和良好的风格,在没有初始化器的情况下在文件范围内定义变量,并在程序开始时依赖于它们为零。(最初拥有一个全局变量通常是错误的,但是如果您真的需要一个变量,那么依赖于隐式初始化到零并不是错误的。)这些是你需要理解的事情,也是你想在适当的时候自己去做的事情。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48550984

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档