免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1875 | 回复: 9

[C] 内核地址正负问题 [复制链接]

论坛徽章:
0
发表于 2009-04-26 12:45 |显示全部楼层
20可用积分
linux中的内核变量地址是正数 还是负数

论坛徽章:
0
发表于 2009-04-26 12:47 |显示全部楼层
unsigned

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:53:172015亚冠之水原三星
日期:2015-06-02 16:34:202015年亚冠纪念徽章
日期:2015-10-19 18:13:37程序设计版块每日发帖之星
日期:2015-11-08 06:20:00
发表于 2009-04-26 12:52 |显示全部楼层
没用正负,只有偏移

论坛徽章:
0
发表于 2009-04-26 12:53 |显示全部楼层

回复 #2 prolj 的帖子

linux内核空间在内存映射到3G到4G的空间 用户空间映射到0G到3G的空间 那内核空间中变量地址不是负数吗

论坛徽章:
0
发表于 2009-04-26 12:53 |显示全部楼层
原帖由 wxj120bw 于 2009-4-26 12:53 发表
linux内核空间在内存映射到3G到4G的空间 用户空间映射到0G到3G的空间 那内核空间中变量地址不是负数吗

偏移

论坛徽章:
0
发表于 2009-04-26 12:57 |显示全部楼层
原帖由 xinglp 于 2009-4-26 12:52 发表
没用正负,只有偏移

我在内核中申明一个变量 int temp,在printk("%d",&temp)输出的是负数 为什么呢 ?

论坛徽章:
0
发表于 2009-04-26 13:10 |显示全部楼层

回复 #6 wxj120bw 的帖子

要用unsigned去定义。

论坛徽章:
0
发表于 2009-04-26 13:17 |显示全部楼层
原帖由 scutan 于 2009-4-26 13:10 发表
要用unsigned去定义。

如果是结构体指针呢 怎么申明呢

论坛徽章:
0
发表于 2009-04-26 16:04 |显示全部楼层
这是符合唯心论的事。你当它是无符号数,它就是正数,当它是有符号数,它就是负数。
不过,至于地址,系统总是当它正数的。

论坛徽章:
0
发表于 2009-04-27 07:06 |显示全部楼层
地址,地址的表示是unsigned的,所以你的变量/struct可以是signed的,但是他们的地址要按照unsigned来解释,不能按照signed来解释,也就是打印地址的时候不能%d而要%u。
当然,如果你计算的是从某一地址的偏移量,就要%d了。
不仅内核,所有的地址都是unsigned的,偏移是相对地址,所以可以signed,不要混淆。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP