关于c语言指针的一些问题。

问题1:一个指针是4个字节(教程中说是32根地址线),那我如果我的操作系统是64位的呢。那么一个指针有多少个字节?问题2:地址线和操作系统的位数有关系吗问题3:len=5... 问题1:一个指针是4个字节(教程中说是32根地址线),那我如果我的操作系统是64位的呢。那么一个指针有多少个字节?
问题2:地址线和操作系统的位数有关系吗
问题3:
len = 5 ;
int * pArr = (int *)malloc(sizeof(int) * len);
上面代码中,一个指针指向了4个字节,如果sizeof(。。。),
。。。为double类型时,一个指针指向了8个字节。
。。。为结构体类型时(不知道可不可以,假设可以的话),那一个指针指向了N个字节。
那么一个指针最多可以指向多少个字节?
展开
 我来答
吉祥二进制
高粉答主

2013-06-27 · 科技改变生活,生活改变科技。
吉祥二进制
采纳数:33926 获赞数:84584

向TA提问 私信TA
展开全部
1、不是说系统64位它就是8字节,而是受限于地址总线的字节宽度,你的地址总线是64位的即指针就是8字节的,但是现在的64位个人pc多半是x86-64能兼容32位的应用程序。

2、有,你64 位的机器,它的虚拟内存可以到8TB,如果你在64位机上装个32位的windows你会发现,我的个去……慢的要死(我犯过这样的低级错误)

3、指针保存的是地址,比如32位机上,每个地址都是32位的,所以它始终都是4字节,没有最大或者最小。

观楼主英俊潇洒、风流倜傥,必当世之豪杰,诚邀楼主加入0x30百度贴吧,共商义举,成千秋霸业。
追问
1、2的64次方为17179869184G,8TB是怎么算的

2、在64位机上装个32位的windows为什么会慢?我也确定也试过,慢的要死。
追答
8tb也不是那算的, 64位的地址线实际上连64根都不到,只实现了40~50根,因为足够用了,Windows x64版本限制了44位寻址,最大16TB内存,所以造成了所谓的AMD64空洞(用户空间在低位,内核空间在高位,而44位寻址不完全,中间必然有空洞) 

也就是说 真正的64位 么有实现

2、那样发挥不出它的性能,我的是外星人 三代i7 2.8 16g物理内存,装了32位系统后 物理内存只有4g,根本就发挥不出性能……。
庄政警
2013-06-27 · TA获得超过9916个赞
知道大有可为答主
回答量:1113
采纳率:94%
帮助的人:890万
展开全部
1: 操作系统是64位的,不代表你的程序中的指针就是64位的,还要看你用的编译器,比如目前的vs,它的指针还是32位的,32位系统中使用16编译器也是一个道理
2:地址线和操作系统的位数没有关系,数据总线的宽度才和操作系统有关系,64位系统指的是一个时钟周期内cpu可操作的数据位的宽度,而这个宽度就是数据总线的宽度

3:举个例子 :
char (*p)[10000];
char a[3][10000];
p=a;
p++; //偏移了10000字节
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
深海_蓝鱼
2013-06-27 · TA获得超过423个赞
知道小有建树答主
回答量:178
采纳率:0%
帮助的人:238万
展开全部

我感觉楼上的回答有点问题

  1. 如果地址总线是64位,操作系统是32位,那一个指针依然是4字节(或者更少)。如果操作系统是64位的,那也不一定是8字节。原因是决定一个变量的字节长度的不是CPU也不是操作系统,而是你的编译器。例:如果在32位机上用TC来sizeof一个指针你会发现是2字节的,通过这个可以发现字节长度和CPU寻址没有直接联系,和这个密切相关的是你的编译器。而32位操作系统上你不可能装一个64位的编译器,所以长度最多还是4,即使是64位的操作系统,一般你用VC6.0的话,编译器还是32位的,也就是长度还是4,这个具体你可以试一下,我也只是说一下理论,具体我也没实践过。

  2. 64位的CPU可以支持64位操作系统并兼容32位16位的,32位CPU可以支持32位操作系统兼容16位的,不过64位操作系统最多也只能支持16G内存,楼上说的8TB是指硬盘吗?

  3. 当然可以为结构体,指针指向的内存的(首地址),而整个数据的长度大小取决于指针的变量类型,不管什么数据类型首地址都是一个字节。如int *p是一个首地址加1字节的长度,long* p是首地址加2个字节长度,etc

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ghosthn2007
2013-06-27 · TA获得超过117个赞
知道小有建树答主
回答量:236
采纳率:0%
帮助的人:107万
展开全部
  1. 32系统指针32位,64系统指针就是64位

  2. 有,一般操作系统位数据是指cpu一次处理数据长度。而这个长度一般与地址线根相同

  3. 你没搞清楚指针的意思。指针里保存的只是地址值,至于它指向多少字节数据,那是程序员自己事的,除了内存不足,应该没上限样

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
songzi11111
2013-06-27
知道答主
回答量:25
采纳率:0%
帮助的人:20.1万
展开全部
问题一:指针的大小是根据你定义大小而定义的,但是内存地址本身是根据操作系统定义的,比如你定义 char * addr,这个就只有一个8位,但是定义 int * addr2就是32位,但是他们所指向内存位置是64位的
问题二:你指的地址线是说操作系统寻址的地址线吧,如果是,那就有直接关系,内存寻址就是由寻址线给出数据的,32位那么操作系统就是32位,反之,内存寻址线是64,操作系统就必须是64位的
问题3:一个指针指向的是一片内存区域,没有指向大小限制
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式