gpt4 book ai didi

c - C 中的 15 位结构

转载 作者:太空宇宙 更新时间:2023-11-04 01:51:24 27 4
gpt4 key购买 nike

我需要为一个项目创建一个内存结构,其中每个字包含 15 位。当我检查数组的大小时,我发现它的大小为 2000 字节,我认为这是因为编译器字节对齐。

有没有办法创建大小为 1875 字节的结构?

这是我使用的代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#pragma pack(push,1)
struct myword
{
unsigned int val : 15;
};
struct mymemmory{

struct myword arr[1000];
};
#pragma pack(pop)


int main()
{
int size = sizeof(struct mymemmory);
printf("Size of arr: %d\n",size);
return 0;
}

当我使用 #pragma pack(push,0) 时,我得到的大小是 4000 字节。

最佳答案

不,没有。如果您需要位级别的粒度,您必须自己实现它,制作一个 1875 字节的数组并手动计算索引和位掩码以提取所需的 15 位。如果您想保持理智,可以将此功能分解为访问器函数,理想情况下使用 C++ 或类似的东西,您可以在其中创建完全抽象工作的自定义类(如此简单的索引使用会完成所有“真实索引”和位移位/掩码在幕后工作;std::vector<bool> 已经为单个位做了类似的事情)。

当然,真正的理智是意识到对超过 125 个字节的数据进行狡辩是愚蠢的。在极少数情况下,为每个值(尤其是对于这么少的值)保存十六分之一是值得的,而我能想到的(实际上需要磁盘上的紧凑表示)仍然可以通过从光盘转换来更好地处理表示在读取时扩展为内存表示,并在写入时转换回,以避免在每次读/写时处理所有移位和屏蔽的麻烦和计算开销。

关于c - C 中的 15 位结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42301973/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com