总线、内存和变量的相关知识
前言
本篇文章主要介绍单片机内部的总线和内存的一些关系及知识点,
一、32位系统和64位系统的区别
1. 8位、16位、32位和64位CPU的含义
如标题所述,不同位数的单片机的主要区别在于能处理多长的数据。如经典的8位单片机80C51,其一次性能处理8bit的数据,其寄存器的长度也是8位;TI的16位单片机能处理16bit的数据,寄存器为16位;STM32能处理32bit的数据,寄存器为32位。需注意的是8位单片机不带表其地址总线是8位。8位的51单片机,其数据总线是8位的,但其地址总线是16位,即其最大寻址空间为64KB。以Cortex-M3为内核的32位单片机,其地址总线是32位,其寻址空间为2^32(4GB)。最后,可以总结为能处理多少位的数据就是多少位的单片机。
2.变量所占内存的区别
不同位数的CPU(单片机)的变量所占的内存也不尽相同,具体如下表所示。
8位 | 16位 | 32位 | 64位 | |
---|---|---|---|---|
char | 1 Byte | 1 Byte | 1 Byte | 1 Byte |
short int | 2 Byte | 2 Byte | 2 Byte | 2 Byte |
int | 2 Byte | 2 Byte | 4 Byte | 4 Byte |
long int | 4 Byte | 4 Byte | 4 Byte | 8 Byte |
long long | 8 Byte | 8 Byte | 8 Byte | 8 Byte |
float | 4 Byte | 4 Byte | 4 Byte | 4 Byte |
double | 8 Byte | 8 Byte | 8 Byte | 8 Byte |
指针 | 1 Byte | 2 Byte | 4 Byte | 8 Byte |
注:
1)上述表格适用于KEIL C51 和 KEIL MDK两个版本中,不一定适用于其它编辑器,具体内容,请查看KEIL软件手册。
2)CPU的位数不能决定int占几个字节,int是一个关键字,只能本编译器识别,CPU不能识别int。对于C语言,同一32位系统PC机上,TC2.0编译器给int分配2个字节,VC6.0给int分配4个字节。