二维数组在内存中是如何存储的?
我考虑了以下方法,其中行作为连续的内存块进行存储。 |___ ___ ___||___ ___ ___||___ ___ ___|...|___ ___ ___|
元素可以通过 (i,j) -> n*i+j 访问,其中n是矩阵的尺寸(假设它是nxn)。
但是如果我想要添加一个新列怎么办?我必须更新每一行中的第(n+1)个元素,并将它们向右移动,但这太耗费计算资源了。
另一个选择是将矩阵复制到一个新位置,并即时使用新列的元素更新行。但是如果数组很大,这也不太高效。
最后我想到的第三种选择是为每一行分配固定数量的内存,当我添加新列时,我不必将行向右移动。
我不能在内存中留下空隙,所以所有块都必须是连续的。
还有其他更有效的方法吗?
我考虑了以下方法,其中行作为连续的内存块进行存储。 |___ ___ ___||___ ___ ___||___ ___ ___|...|___ ___ ___|
元素可以通过 (i,j) -> n*i+j 访问,其中n是矩阵的尺寸(假设它是nxn)。
但是如果我想要添加一个新列怎么办?我必须更新每一行中的第(n+1)个元素,并将它们向右移动,但这太耗费计算资源了。
另一个选择是将矩阵复制到一个新位置,并即时使用新列的元素更新行。但是如果数组很大,这也不太高效。
最后我想到的第三种选择是为每一行分配固定数量的内存,当我添加新列时,我不必将行向右移动。
我不能在内存中留下空隙,所以所有块都必须是连续的。
还有其他更有效的方法吗?