Chinaunix首页 | 论坛 | 博客
  • 博客访问: 957858
  • 博文数量: 120
  • 博客积分: 6454
  • 博客等级: 准将
  • 技术积分: 1739
  • 用 户 组: 普通用户
  • 注册时间: 2007-06-28 17:45
文章分类

全部博文(120)

文章存档

2014年(1)

2013年(1)

2012年(11)

2011年(16)

2010年(6)

2009年(11)

2008年(30)

2007年(44)

分类: C/C++

2008-08-25 10:00:51

要节省带宽,就要将数据压缩(pack)的更加紧致,或减少其在执行核之间的移动。将数据压缩得更加紧致通常是比较直接的方法,并且对串行执行也是有益的。例如,将布尔型的数组压缩成用一位来表示一个布尔值,而不是用一个字节来表示一个布尔值。也可以使用最短的数据类型保存要求范围内的数值。在C/C++中声明结构的时候,按照数据类型大小的降序来声明每一个域。这种策略可以将编译器用于维护对其原则所进行的额外填充数量降到最低。
有些编译器还支持“#pragma pack”指导命令,将结构压缩得更加紧致,使用的手段可能是删除所有的填充内容。但是这种非常紧致的压缩可能不是很高效,因为它会导致非对齐的载入和存储操作,这样会比对齐的载入和存储操作慢得多。

struct Loose
{
    short s;
    int i;
    char c;
    CClassA* p;
};

struct Tight
{
    CClassA* p;
    int i;
    short s;
    char c;
};

int main(int argc, char* argv[])
{
    cout<<sizeof(Loose)<<endl;  // 16
    cout<<sizeof(Tight)<<endl;  // 12
    return EXIT_SUCCESS;
}

摘自《Multi-Core Programming》

阅读(1676) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~