繁体   English   中英

如何在RAM存储器中进行数据布局?

[英]How data layout in RAM memory?

我有一个基于基本架构的问题。 多维数组如何在内存中布局? 数据在内存中线性排列是否正确? 是这样,基于行顺序的行主要订单数据存储(第一行存储,然后第二行...)以及基于列的列主要数据存储是否正确?

谢谢

每个数组自然都按顺序存储。 将数据分散到整个地方毫无意义。

在C中的示例:

int matrix[10][10];
matrix[9][1] = 1234;
printf("%d\n", matrix[9][1]); // prints 1234
printf("%d\n", ((int*)matrix)[9 * 10 + 1]); // prints 1234

当然,没有什么可以强迫您以这种方式组织数据,如果您想弄乱,可以这样做。

例如,如果您决定不使用数组来决定动态分配矩阵,则:

int **matrix;
matrix = malloc(10 * sizeof(int*));
for (int i = 0; i < 10; ++i)
    matrix[i] = malloc(10 * sizeof(int));

上面的示例很可能仍按顺序存储,但肯定不是连续存储的,因为分配了11个不同的存储块,并且内存管理器可以随意分配它们。

数组的表示形式取决于编程语言。 大多数语言(C流产及其后代是明显的例外)都使用描述符来表示数组。 描述符指定每个维的上下边界的维数以及数据的位置。

通常,数组的所有数据都连续存储。 即使连续存储,其顺序也取决于语言。 在某些语言中,[0,0,0]存储在[1,0,0]的旁边(主列-例如FORTRAN)。 在其他情况下,[0,0,0]紧挨着[0,0,1](并且[0,0,0]和[1,0,0]分开-行主要-例如,帕斯卡)。 某些语言(例如Ada)将顺序留给编译器实现。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM