gpt4 book ai didi

c - 是否有检测硬件位宽的标准方法?

转载 作者:太空狗 更新时间:2023-10-29 17:26:51 28 4
gpt4 key购买 nike

据称 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/

我会引用结论(加粗)

Thus the bottom line is this. If you want to start writing efficient, portable embedded code, the first step you should take is start using the C99 data types ‘least’ and ‘fast’. If your compiler isn’t C99 compliant then complain until it is – or change vendors. If you make this change I think you’ll be pleasantly surprised at the improvements in code size and speed that you’ll achieve.

最佳答案

I have to re-write the function for every architecture

不,你不知道。使用 C99 的 stdint.h,它具有类似 uint_fast8_t 的类型,该类型能够快速保存 256 个值。

然后,无论平台如何,类型都会相应地发生变化,您无需更改代码中的任何内容。如果您的平台没有定义这些,您可以添加自己的。

比重写每个函数要好得多。

关于c - 是否有检测硬件位宽的标准方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3346205/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com