PAL*_*LEN 7 c arrays string malloc data-representation
我正在编写游戏并希望使用数组来表示一个板.我正在寻找效率,因为我要进行多次迭代.在这种情况下,int数组或char数组似乎都很方便用于电路板表示.在int数组和char数组中进行操作时,效率方面有什么不同吗?
我怀疑由于char数组的每个元素都有1个字节的大小,因为内存中的表示形式不同,所以它可能会更慢(考虑到一个现代计算机至少有32位用于int表示)...我是对的吗?
提前致谢.
编辑:我将生成游戏树,这就是效率如此重要以及时间消耗的微小差异可以产生巨大差异的原因.
chars 通常是 1 字节对齐,ints 一般是 4 字节对齐。假设您正在使用遵循此标准的机器,两个数组都将其内容存储为连续的内存块(int数组大小是char数组大小的 4 倍)。因此,就如何利用分配的内存块而言,任何一个都不太可能有任何不同。
话虽如此,即使底层内存表示有任何不同,我怀疑它会影响您的程序的吞吐量。
哪个CPU/s?
某些CPU无法直接访问小于"某物"的任何内容,并且编译器需要生成"加载,移位和屏蔽"指令序列以访问单个字节.使用int应该赢得这种情况.
某些CPU可以毫无问题地访问字节.在这种情况下(如果涉及的数据足够重要),问题可能是缓存大小和/或内存带宽; 并且(至少对于80x86)我期望char只是因为更多数据被打包到每个缓存行中而获胜.
对于哪个算法?
如果你可以把SIMD扔到它,char很可能会赢.例如,使用128位SIMD,每条指令可以处理16个字节,或者每条指令可以处理4个(32位)整数,因此char可能只有4倍.
最好的建议是使用类似的东西:
#ifdef USE_INT
typedef int thingy
#else
typedef unsigned char thingy
#endif
Run Code Online (Sandbox Code Playgroud)
然后您可以对其进行分析并随时更改它.
| 归档时间: |
|
| 查看次数: |
3051 次 |
| 最近记录: |