C中的原始数据类型表示CPU-arch的WORD大小

时间:2010-03-22 00:23:43

标签: c memcpy

我观察到long的大小总是等于任何给定CPU架构的WORD大小。所有架构都适用吗?我正在寻找一种可移植的方式来表示C中的WORD大小的变量。

6 个答案:

答案 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)

我认为你得到的最接近的答案是......

  • intunsigned int经常(但不总是)匹配机器的寄存器宽度。
  • 这是一个类型,它是一个整数 - 相同大小的指针,拼写为intptr_t,可从stddef.h IIRC获得。这显然应该与您的架构的地址宽度相匹配,但我不知道有任何保证。

然而,架构通常没有单个字大小 - 可能存在不同宽度的寄存器(例如Intel x86中的“普通”与MMX寄存器),寄存器宽度通常不匹配总线宽度,地址和数据可能有不同的宽度等等。

答案 5 :(得分:1)

嵌入式世界的事情将变得更加复杂。 ASAIK,C51是8位处理器,但在Keil C中为c51,长有4个字节。我认为这取决于编译器。