int类型的变量被称为“一个机器类型的字长” 但在嵌入式系统中,8位微的C编译器使用16位int(8位无符号字符),然后获取更多位, INT行为正常: 在16位微位int也是16位,并在32位微位int是32位等。有没有标准的方法来检测硬件的位宽?
那么,有没有一个标准的方式来测试它,像BITSIZEOF(INT)?
像“sizeof”是为字节,但为位。
,这是我的第一个想法
register c=1;
int bitwidth=0;
do
{
bitwidth++;
}while(c<<=1);
printf("Register bit width is : %d",bitwidth);
但是这需要C作为int和它的8个编译器是常见的INT 16位使用,所以它给了我16的结果,似乎也没有标准使用“int”作为“注册宽度”,(或不尊重)
为什么我要检测它?假设我需要许多变量,它们需要少于256个值,因此它们可以是8,16,32位,但是使用正确的大小(与内存和寄存器相同)会加快速度并节省内存,如果不能在代码决定,我必须重新编写函数为每建筑
编辑阅读答案 后,我发现这个好文章
http://embeddedgurus.com/stack-overflow/category/efficient-cc/page/4/
我引用的结论(加粗体)
因此 的底线是这样的。如果你想 开始编写高效的,便携的 嵌入代码,你应该采取的第一步是开始使用C99 数据类型'最少'和'快'。如果您的 编译器不符合C99,则 抱怨,直到它或 - 更改 供应商。如果您进行此更改I 认为您将会惊喜 您的代码大小和 速度将得到改进。
使用像char,int,short这样的类型是不好的做法,应该被嵌入式系统禁止。我见过一个编译器(CodeWarrior),它允许你改变每种类型的长度。只要使用types.h头文件即可。 – kmalmur 2010-07-27 17:59:15