免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 10985 | 回复: 10
打印 上一主题 下一主题

关于NR_CPUS的疑惑 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-11-22 16:05 |只看该作者 |倒序浏览
  1. #define NR_CPUS         CONFIG_NR_CPUS
复制代码
在学c语言的时候,告诉我们,数组的声明是不能动态的。
我看到内核源码中很多都是以NR_CPUS声明数组的,那么在编译的时候,编译器怎么样知道对应的CPU数目?
还有我们在安装ubuntu的时候,内核应该是已经编译好了的吧?那么他怎么可以让不同机器的cpu都得到利用呢?

论坛徽章:
0
2 [报告]
发表于 2010-11-22 17:11 |只看该作者
回复 1# 论坛ID


CONFIG_NR_CPUS是个宏,它定义了最大的CPU数目,具体的CPU数目,kernel可以识别出来。

论坛徽章:
0
3 [报告]
发表于 2010-11-22 17:20 |只看该作者
在学c语言的时候,告诉我们,数组的声明是不能动态的
——
楼主的C语言没有更新。。。。。。

论坛徽章:
0
4 [报告]
发表于 2010-11-22 23:18 |只看该作者
CONFIG_NR_CPUS是在make menuconfig配置内核时就配好的,它在编译内核之前就已经知道了。

论坛徽章:
0
5 [报告]
发表于 2010-11-23 08:33 |只看该作者
在学c语言的时候,告诉我们,数组的声明是不能动态的
——
楼主的C语言没有更新。。。。。。
独孤九贱 发表于 2010-11-22 17:20



    晕 数组的长度也可以是动态的了?我不是说在编译的时候确定

论坛徽章:
0
6 [报告]
发表于 2010-11-23 08:34 |只看该作者
回复  论坛ID


CONFIG_NR_CPUS是个宏,它定义了最大的CPU数目,具体的CPU数目,kernel可以识别出来。
biger410 发表于 2010-11-22 17:11



    那内核中那么多数据结构中数组长度岂不是在编译好以后还可以变化了?

论坛徽章:
0
7 [报告]
发表于 2010-11-23 08:36 |只看该作者
CONFIG_NR_CPUS是在make menuconfig配置内核时就配好的,它在编译内核之前就已经知道了。
suiming2005 发表于 2010-11-22 23:18



    我想,总不可能mak menuconfig的时候写多少,内核就当多少个处理器吧

论坛徽章:
0
8 [报告]
发表于 2010-11-23 10:12 |只看该作者
回复 6# 论坛ID


    数组长度编译的时候就确定了,比如定义成CONFIG_NR_CPUS定义成32。但实际中可能只用到其中4个,后面28个空闲不用。
至于变长数组,C99支持了,不过仅限于在函数中定义的局部变量,全局变量是不行的。

论坛徽章:
0
9 [报告]
发表于 2010-11-23 10:25 |只看该作者
谢谢各位解答,小弟明白了。

论坛徽章:
0
10 [报告]
发表于 2010-11-26 13:11 |只看该作者
回复 7# 论坛ID


    CONFIG_NR_CPUS是内核被配置支持的CPU个数,而实际设备的CPU个数是在系统启动过程当中去动态监测的。也就是说你配置系统支持32个CPU那么CONFIG_NR_CPUS就等于32,而num_online_cpus()则是当前设备激活可调度的CPU个数。
如果我们配多少系统就认为有多少个CPU那Intel早就倒闭了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP