Ada语言中自定义u1数组能否被高效打包为位向量?
Ada中U1Array是否为按位打包的位向量的判定
不能直接认定这个U1Array类型是每字节包含8位的高效位向量,具体原因和实现方式如下:
Ada编译器默认不会自动对小范围整数类型的数组进行按位打包。你定义的
u1是范围0..1的整数类型,默认情况下编译器会为单个u1实例分配至少1字节的存储单元,此时U1Array的总占用空间约为500KB(500000个字节),而非按位打包后的约62.5KB。如果要实现每字节8位的位向量存储,必须显式指定打包规则,常见的两种写法:
- 使用
Pack修饰符声明数组:type U1Array is array(Index) of u1 with Pack; - 显式指定组件的存储大小:
type U1Array is array(Index) of u1; for U1Array'Component_Size use 1;
- 使用
只有通过上述显式声明,才能确保编译器将U1Array按位打包,让每个u1元素仅占用1个比特位,实现高效的位向量存储。
内容的提问来源于stack exchange,提问作者BitTickler
相关产品推荐
相关产品推荐

