【发布时间】:2012-02-02 18:43:31
【问题描述】:
二维数组如何存储在内存中?
我想到了以下方法,将行存储为连续的内存块。
|_________||_________|________|________ |...|_________|
元素的访问方式类似于 (i,j) -> n*i+j,其中 n 是矩阵的维数(假设它是 nxn)。
但是如果我想向其中添加一个新列怎么办?我必须更新每行中的每个 (n+1) 个元素并将它们向右移动,但这在计算上太昂贵了。
另一种选择是将矩阵复制到新位置并使用新列的元素即时更新行。但是如果数组很大,那也不是很有效。
最后我想到的第三个选项是为每一行分配固定数量的内存,当我添加新列时,我不必将行向右移动。
我不能在内存中有间隙,所以所有块必须是连续的。
我不是要求使用指针和实际 RAM 内存的 C 实现,我只是对在内存中存储动态二维数组的理论方法感到好奇,以便轻松追加新行或列给它。
还有其他更有效的方法吗?
【问题讨论】:
-
您使用什么尺寸?我们说的是 1.000.000 个元素中的 10 个元素吗?
标签: c memory-management multidimensional-array