关于c语言指针的一些问题。
问题2:地址线和操作系统的位数有关系吗
问题3:
len = 5 ;
int * pArr = (int *)malloc(sizeof(int) * len);
上面代码中,一个指针指向了4个字节,如果sizeof(。。。),
。。。为double类型时,一个指针指向了8个字节。
。。。为结构体类型时(不知道可不可以,假设可以的话),那一个指针指向了N个字节。
那么一个指针最多可以指向多少个字节? 展开
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,根本就发挥不出性能……。
2:地址线和操作系统的位数没有关系,数据总线的宽度才和操作系统有关系,64位系统指的是一个时钟周期内cpu可操作的数据位的宽度,而这个宽度就是数据总线的宽度
3:举个例子 :
char (*p)[10000];
char a[3][10000];
p=a;
p++; //偏移了10000字节
我感觉楼上的回答有点问题
如果地址总线是64位,操作系统是32位,那一个指针依然是4字节(或者更少)。如果操作系统是64位的,那也不一定是8字节。原因是决定一个变量的字节长度的不是CPU也不是操作系统,而是你的编译器。例:如果在32位机上用TC来sizeof一个指针你会发现是2字节的,通过这个可以发现字节长度和CPU寻址没有直接联系,和这个密切相关的是你的编译器。而32位操作系统上你不可能装一个64位的编译器,所以长度最多还是4,即使是64位的操作系统,一般你用VC6.0的话,编译器还是32位的,也就是长度还是4,这个具体你可以试一下,我也只是说一下理论,具体我也没实践过。
64位的CPU可以支持64位操作系统并兼容32位16位的,32位CPU可以支持32位操作系统兼容16位的,不过64位操作系统最多也只能支持16G内存,楼上说的8TB是指硬盘吗?
当然可以为结构体,指针指向的内存的(首地址),而整个数据的长度大小取决于指针的变量类型,不管什么数据类型首地址都是一个字节。如int *p是一个首地址加1字节的长度,long* p是首地址加2个字节长度,etc
32系统指针32位,64系统指针就是64位
有,一般操作系统位数据是指cpu一次处理数据长度。而这个长度一般与地址线根相同
你没搞清楚指针的意思。指针里保存的只是地址值,至于它指向多少字节数据,那是程序员自己事的,除了内存不足,应该没上限样
问题二:你指的地址线是说操作系统寻址的地址线吧,如果是,那就有直接关系,内存寻址就是由寻址线给出数据的,32位那么操作系统就是32位,反之,内存寻址线是64,操作系统就必须是64位的
问题3:一个指针指向的是一片内存区域,没有指向大小限制