一维数组和二维数组(矩阵)之间是否存在效率差异?

fra*_*2tm 2 c arrays multithreading multidimensional-array

我目前正在为大学开发用C语言开发的游戏板。老师提供了一些代码,他将板子存储在内存中的方式是一维数组,板子有16个元素(4x4板子),第0行位于位置[0,3],第2行位于位置[ 4,7] ..等。他还使用下面的函数将二维坐标(i,j)转换为一维坐标,以正确访问右侧板位置(以下函数)。该板将由多个线程管理,也许这将有助于多线程同步?我的问题是:将电路板存储在具有4行4列的二维数组(矩阵)中是否效率较低?

int linearConv(int i, int j){
  return j*dim+i;
}
char* getBoardPlaceStr(int i, int j){
  return board[linearConv(i, j)].v;
}
Run Code Online (Sandbox Code Playgroud)

PS:另外,是否正在访问数组[0]之类的错误,取消引用指针(即* pointer),访问不需要关键区域的struct成员(即struct.member或sutuct-> member)原子操作?

Max*_*kin 5

将电路板存储在具有4行4列的二维数组(矩阵)中,效率会降低吗?

都:

T board[4][4];
Run Code Online (Sandbox Code Playgroud)

和:

T board[4 * 4];
Run Code Online (Sandbox Code Playgroud)

具有相同的大小,对齐方式和布局。通常,任何维数组中的元素都没有间隙地连续存储(否则指针算法将不起作用)。

在组件中使用[j][i]和访问元素进行[j * 4 + i]相同的计算。

换句话说,这两者之间没有性能或空间上的差异。