为什么32位操作系统的char指针是4个字节的?
如题,为什么32位操作系统的char指针是4个字节的?跟32位cpu的数据总线有关吗?一次可以处理32位的数据,所以是32bit/8 = 4Byte吗?假如 64位的操作系统 ,但是用的是32位的cpu,一个char指针还是4个字节吗?这个是要看编译器的吗? 32位和64位系统中,编译器为了相互兼容,所以指针都是4个字节长度。 指针存储的是地址,占 4 个字节没毛病 本帖最后由 baige 于 2020-8-6 14:07 编辑
32位编译器指针都是4个字节,64位编译器指针8个字节
dev的话可以在这里更换32位,64位测试
#include <stdio.h>
int main()
{
char *p;
printf("%d",sizeof(p));
return 0;
}
这是64位编译器的运行结果
这是32位编译器
xiaosi4081 发表于 2020-8-6 14:02
32位和64位系统中,编译器为了相互兼容,所以指针都是4个字节长度。
这个我之前百度了一波,好像是编译器的问题,64位系统 ,用64位的编译器可以得到8位的指针。但是不明白32位系统 ,指针大小4字节背后的原理。请大佬不吝赐教。 zltzlt 发表于 2020-8-6 14:03
指针存储的是地址,占 4 个字节没毛病
32位操作系统 ,使用32位来存储内存地址,所以32bit/8 = 4byte,是这样来的吗? 大妈学编程 发表于 2020-8-6 14:19
32位操作系统 ,使用32位来存储内存地址,所以32bit/8 = 4byte,是这样来的吗?
是的 百度的:编译器一般默认32位的,32位寻址也就是32位二进制,转换成16进制就是8位,一个字节是两位16进制代码,8位就是4个字节 本帖最后由 jackz007 于 2020-8-6 14:28 编辑
大妈学编程 发表于 2020-8-6 14:14
这个我之前百度了一波,好像是编译器的问题,64位系统 ,用64位的编译器可以得到8位的指针。但是不明白32 ...
32 位程序内存采用 32 位指针进行寻址,所以,不止是一个 char 型的指针,任何类型的指针都必须占用 4 个字节;如果是 64 位程序,内存采用 64 位指针进行寻址,所有的指针都必须占用 8 个字节。道理很简单,想一想,你的车牌是不是一定是 7 个字符(拒绝杠精)? 本帖最后由 风过无痕1989 于 2020-8-6 14:59 编辑
cpu是无法直接在硬盘上读取数据的,而是通过内存读取。cpu通过地址总线、数据总线、控制总线三条线对内存中的数据进行传输和操作。
具体流程:
1、cpu通过地址总线,找到该条数据;
2、通过控制总线得知该操作是读操作还是写操作;
3、通过数据总线将该数据读取到cpu或者从cpu写到内存中。
所以,
地址总线的宽度决定了CPU的寻址能力;
数据总线的宽度决定了CPU单次数据传输的传送量,也就是数据传输速度;
控制总线决定了CPU对其他控件的控制能力以及控制方式
简单的说32位的操作系统就是指:地址总线是32位的系统。那么,也就是说操作系统的位数决定了指针变量所占的字节数。 指针是用来存地址的。地址要用四个字节来表示。不管它是char还是int,它们的地址都是用四个字节表示的。地址就是你家门牌号。你说你家门牌号是几位数字还由你家住的什么人来决定吗?
页:
[1]