我观察到long的大小总是等于任何给定CPU架构的WORD大小。所有架构都适用吗?我正在寻找一种可移植的方式来表示C中的WORD大小的变量。
答案 0 :(得分:3)
C不处理说明。在C99中,您可以使用单个作业复制任何大小struct
:
struct huge { int data[1 << 20]; };
struct huge a, b;
a = b;
使用智能编译器,这应该生成最快的(单线程,但将来有希望多线程)代码来执行复制。
如果您想要供应商定义的“尽可能快”的整数类型,则可以使用int_fast8_t
类型。这可能与字大小相对应,但肯定不能保证单指令可写。
我认为您最好的选择是默认为一种类型(例如int
)并使用C预处理器来优化某些CPU。
答案 1 :(得分:3)
没有。事实上,标量和矢量单位通常具有不同的字大小。然后是字符串指令和内置DMA控制器,具有奇怪的功能。
如果要快速复制数据,平台标准C库中的memcpy
通常是最快的。
答案 2 :(得分:2)
在Windows下,sizeof(long)
为4,即使在64位版本的Windows上也是如此。
答案 3 :(得分:1)
不,标准没有这种类型(最大化内存吞吐量)。
但是它声明int
必须是处理器上用于对其执行ALU操作的最快类型。
答案 4 :(得分:1)
我认为你得到的最接近的答案是......
int
和unsigned int
经常(但不总是)匹配机器的寄存器宽度。intptr_t
,可从stddef.h IIRC获得。这显然应该与您的架构的地址宽度相匹配,但我不知道有任何保证。然而,架构通常没有单个字大小 - 可能存在不同宽度的寄存器(例如Intel x86中的“普通”与MMX寄存器),寄存器宽度通常不匹配总线宽度,地址和数据可能有不同的宽度等等。
答案 5 :(得分:1)
嵌入式世界的事情将变得更加复杂。 ASAIK,C51是8位处理器,但在Keil C中为c51,长有4个字节。我认为这取决于编译器。