当前位置: 首页 > 知识库问答 >
问题:

效率:字符数组与整数数组

洪光霁
2023-03-14

我正在编写一个游戏,想用一个数组来表示一个棋盘。我正在寻找效率,因为我要做许多迭代。在这种情况下,无论是int数组还是char数组对于棋盘表示都很方便。在int数组和char数组中做运算,效率上有区别吗?

我怀疑,因为char数组的每个元素的大小都是1字节,所以它可能会因为内存中的不同表示而变慢(考虑一台现代计算机,它至少有32位用于int表示)...我说的对吗?

先谢谢你。

编辑:我将生成游戏树,这就是为什么效率如此重要,时间消耗的微小差异会产生巨大的差异。

共有3个答案

谢选
2023-03-14

试试看。使用 -S 标志到 gcc 获取汇编代码:

gcc -Wall -S code.c -o code.s

查看生成的代码长度是否有明显差异。这不一定是全部,因为您需要了解汇编程序来判断差异。但它可能会给你一个提示 - 可能 int 和 char 会大致相同。

请注意,如果您混合类型,您几乎肯定会使用char数组获得稍微慢一点的代码。因此,如果您将数据存储在char数组中,然后使用int类型以某种方式“处理”它,那么每次在两者之间进行转换时,您可能会得到一条额外的指令。试试-S。

陶宜民
2023-03-14

< code>char通常是1字节对齐的,< code>int通常是4字节对齐的。假设您正在使用一台遵循此标准的机器,这两个数组都将它们的内容存储为连续的内存块(< code>int数组的大小是< code>char数组的4倍)。因此,就如何利用分配的内存块而言,这两者不太可能有任何不同。

也就是说,即使底层内存表示有任何不同,我怀疑它会影响程序的吞吐量。

华子昂
2023-03-14

用于哪些CPU/s?

一些CPU不能直接访问比“东西”小的东西,编译器需要生成一个“加载,移位和屏蔽”指令序列来访问单个字节。在这种情况下,使用 int 应该会获胜。

有些CPU可以毫无问题地访问字节。在这种情况下(如果涉及足够多的数据,这很重要),问题可能是缓存大小和/或内存带宽;而且(至少对于80x86)我认为< code>char会赢,因为更多的数据被打包到每个缓存行中。

哪种算法?

如果你能把SIMD扔向它,< code>char很可能会赢。例如,使用128位SIMD,每条指令可以处理16个字节,或者每条指令可以处理4个(32位)整数,因此< code>char可能会快4倍。

最好的建议是:

#ifdef USE_INT
    typedef int thingy
#else
    typedef unsigned char thingy
#endif

然后,您可以随时对其进行分析并进行更改。

 类似资料:
  • 问题内容: 我有一个可能包含数千个对象的模型。我想知道什么是最有效的方式来存储它们并在获得ID后检索单个对象。ID是长数字。 这些是我正在考虑的两个选项。在选项一中,它是一个带有递增索引的简单数组。在选项2中,如果有区别,它是一个关联数组,也可能是一个对象。我的问题是,当我主要需要检索单个对象时,有时又遍历它们并进行排序时,哪一个效率更高。 具有非关联数组的选项一: 选项2与关联数组: 更新: 好

  • 问题内容: 因此基本上,用户是从扫描仪输入中输入序列。 等等。 它可以是任意长度,并且必须是整数。 我想将输入的字符串转换为整数数组。 所以会,就等 有什么提示和想法吗?我正在考虑实现获取先前的编号并将它们解析在一起,并将其应用于数组中的当前可用插槽。但是我不太确定如何编写代码。 问题答案: 您可以从扫描仪中读取整个输入行,然后将其分开,然后得到一个,将每个数字解析为与索引一对一匹配的…(假设输入

  • 在程序设计中,为了方便处理,通常把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组。在C语言中,数组属于构造数据结构。一个数组可以分解成多个数组元素,这些数组元素可以是基本数据类型或是构造类型。因此按照数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。 本文主要介绍一维数组、二维数组和字符数组,其余的数组将会在以后的文章中介绍到。

  • 我正在写一个简单的井字游戏,需要在轮到他们的时候接受用户输入。玩家应该简单地提供一组坐标来放置他们的令牌(1,1)到(3,3)。我应该能够接受输入为“2 1”或“2,1”或“2,1”。所以我需要能够获取他们的字符串输入并提取两个数字中的每一个,而不管分隔符如何,并使用它们将他们的令牌分配给3x3数组中的指定单元格。 主要的问题是只能利用我们已经学过的东西(这是Java的第一节)。这是构建Java程

  • 如何在java中将字节数组转换为int。我正在构建蓝牙应用程序,我在其上收到字节数组中的消息,然后将其转换为字符串,它已成功转换,但我也希望它以整数形式存在

  • 问题内容: 我正在尝试将分类变量的字符串数组转换为分类变量的整数数组。 例如 我意识到可以通过循环完成此操作,但我想有一种更简单的方法。谢谢。 问题答案: 好吧,这是一个hack …但是有帮助吗?