为什么struct小于16个字节会更好

Ric*_*cky 11 .net

我正在研究结构; 如果实例大小小于16个字节,一些书建议创建struct .

为什么?

谢谢你的回复.

Guf*_*ffa 31

这是因为16个字节是编译器开始将结构复制为内存块而不是使用一个或两个简单移动指令的阈值.

当结构很小时,编译器会优化结构的复制.例如,八个字节的结构可以作为单个64位值复制.16字节的结构可以复制为一个或两个奇异值(取决于处理器体系结构).当结构大于16个字节时,编译器不再尝试优化移动,而后退是调用复制内存块的方法.

(注意:16字节的阈值可能因编译器的版本而异,看起来它实际上试图在新版本中超过该点进行优化,但与复制参考相比,优化的代码仍然会有很多移动指令到仍然是单一移动操作的对象.)

编辑:
这是我在我的64位系统复制结构上进行了五十次测试的结果:

struct 4    : 272 ms.
struct 8    : 235 ms.
struct 16   : 317 ms.
struct 32   : 625 ms.
struct 64   : 1280 ms.
struct 128  : 4659 ms.
struct 256  : 8020 ms.
Run Code Online (Sandbox Code Playgroud)

如您所见,16字节以下的时间不是线性的,尽管16字节是4字节的4倍,但不会花费4倍的时间.超过16个字节的时间是线性的,因此将大小加倍的时间加倍.这就是它开始使用多个动作的地方.超过64个字节有一个跳跃,当大小加倍时,时间突然增加四倍.这就是开始使用后备的地方.