| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5274 人关注过本帖
标题:指针长度由什么决定呢?
只看楼主 加入收藏
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
而且受硬件限制的东西,很难说清楚。
我们只能从 CPU 提供的能力角度认识问题。如果总线不支持,那 CPU 应该是和那块主板根本不搭吧?
2010-08-23 01:04
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1687
专家分:4253
注 册:2007-12-27
收藏
得分:0 
指针长度是由编译器决定的,具体地说,由编译器的目标平台选项来确定。
至于硬件和操作系统,你可以说某个平台和你编译出来的可执行代码兼容或者不兼容。但是硬件和操作系统不会直接决定你C语言代码里面的指针。

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2010-08-23 18:00
yxwsbobo
Rank: 5Rank: 5
等 级:职业侠客
帖 子:345
专家分:306
注 册:2007-10-29
收藏
得分:0 
楼上说的没啥问题,因为可执行文件是编译器生成的,所以可执行文件的任何行为都是编译器决定的..


不是CPU决定的,在32位CPU上,64位操作系统中运行64位应用程序,指针的大小一定是8字节

不是操作系统决定的,在64位操作系统运行32位应用程序,指针大小一定是4字节

想弄清这个问题,要明白指针大小和什么有关


指针的大小决定寻址的范围,或者说就是内存可表示的大小,不管代码还是数据都存放于内存中,所以寻址的范围就是内存的范围




在32位环境中 内存范围是 0000 ~  0xffffffff也就是 0 到4GB(2^32),这也是为什么32位操作系统理论最大内存只能有4GB


指针长度由 可执行文件的目标CPU类型 决定,这个存储在PE头中偏移+4的位置  其实就是这2个字节决定应用程序的目标CPU类型


12楼的测试应该是有问题的

试试
int a;
int *p = &a;
sizeof(p);

另外sizeof是硬编码进去的,也就是说是编译时决定而不是运行时决定,所以要配置好编译器的预处理选项

[ 本帖最后由 yxwsbobo 于 2010-8-23 19:35 编辑 ]

How are you 怎么是你?
How old are you   怎么老是你?
2010-08-23 19:27
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
收藏
得分:0 
说的有点意思,但是怎么解释 我在 12楼提供的程序,
在gcc下编译,指针的长度既有4又有8呢?

~~~~~~~~~~~~~~~好好学习~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2010-08-25 00:17
快速回复:指针长度由什么决定呢?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020697 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved