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)原子操作?
将电路板存储在具有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]
相同的计算。
换句话说,这两者之间没有性能或空间上的差异。
归档时间: |
|
查看次数: |
66 次 |
最近记录: |