【发布时间】:2021-11-07 13:16:50
【问题描述】:
我正在尝试编写一个国际象棋程序,在大多数情况下我只需要 4、6 或 8 个(这里我可以使用 char)字节。 那么我可以创建一个使用 4 个字节的类型,或者每个案例使用 4 个字节的数组吗?这将显着提高内存(以及效率?)。
谢谢大家。
【问题讨论】:
-
“我只需要 4、6 或 8 个(在这里我可以使用 char)字节” -
char是一个字节,所以你可以用它来做任何事情在这里列出。你的意思是字节还是位? -
“这会显着增加内存” 我假设您正在尝试实现 AI 并存储状态。对于现代 PC 来说,使用 32 块中的每块多几个字节绝对是微不足道的,因此存储需要更多字节的单个状态应该不是问题。至于分配任意数量的字节:只要数字不为零,这绝对没有问题,除了实际上您将有效地消耗 8 个或更多字节。
-
您是否会通过改善内存消耗获得好处取决于许多因素:如果有足够的主内存可用,优化缓存数据可能会产生更好的结果,但这可能正是与内存消耗相同。顺便说一句:如果可能存在过多的小内存分配问题,您可以通过为属于不同实体的数据分配和使用数组的一部分来解决这个问题......
-
一般来说,对于这种情况,您应该简单地使用数据成员按大小递减顺序排列的结构,通常可以得到最小对齐的最小数据。例如
struct small { unsigned short a; unsigned short b; unsigned char c; unsigned char d; };可能是 6 或 8 个字节并且非常有效。如果需要更多压缩,则更多的是逐案分析,而不是一些一般规则。 -
您当前的数据定义在哪里?在提出问题时,您几乎应该总是提供一些代码来显示您所做的事情。
标签: c++ performance c++11 memory dynamic-memory-allocation