今天早上我和一位同事就这个话题进行了讨论。他说,将数组分配为指针数组总是更好,因为单独分配每个元素有更好的机会获得空闲内存块。有人这样想:
// Consider n_elements as a dynamic value
int n_elements = 10, i;
int **ary = (int **) malloc(sizeof(int *) * n_elements);
for(i = 0; i < n_elements; i++)
{
ary[i] = (int *) malloc(sizeof(int));
}
与他的方法相反,我认为分配元素数组更好,因为您将获得一个紧凑的内存块,而不是一堆散布在堆周围的引用。像这样的东西:
int n_elements = 10;
int *ary = (int *) malloc(sizeof(int) * n_elements);
ary[0] = 100;
在这次谈话之后,我一直在考虑它,我的最终结论是这取决于。由于我上面提到的原因,在处理小型数据类型时,我发现第二种解决方案是一种更好的方法,但是在分配大型结构的数组时,第一种可能更好。
除了我的结论,你怎么看?