图书馆,帮助包装结构具有良好的性能

时间:2011-10-20 17:01:05

标签: c++ performance data-structures

几天前我听说(也许我已经看过了!)关于图书馆,这有助于打包结构。不幸的是 - 我不记得它的名字。

在我的程序中,我必须保留大量数据,因此我需要打包它们,避免在间隙上丢失位。例如:我必须保留范围1 ... 5中的许多数字。如果我将它们保留在char中 - 它将需要8位,但这个数字可以保持3位。此外 - 如果我将这些数字保存在最大数为256的8位数据包中,我可以打包51个数字(而不是1或2!)。

是否有任何图书馆,这有助于这些行动,还是我自己做这个?

1 个答案:

答案 0 :(得分:1)

正如Tomalak Garet'kal已经提到的,这是ANSI C的一个特性,称为位域。 wikipedia article非常有用。通常,您将它们声明为结构。

对于您的示例:正如您所提到的,您有一个数字在0..5的范围内,您可以在此数字上使用3位,这样就可以使用5位:

struct s
{
    unsigned int mynumber : 3;
    unsigned int myother : 5;
}

这些现在可以像这样访问:

struct s myinstance;
myinstance.mynumber = 3;
myinstance.myother = 1;

请注意位字段比通常的struct成员/变量更慢,因为运行时必须执行位移/屏蔽以允许访问简单位。