在此代码中,当我们为2D数组动态分配内存时,在4位地址之后为什么占用16个字节的间隙,但是当我们静态分配2D数组时,它没有这种间隙..这背后的原因???
#include <stdio.h>
#include <stdlib.h>
int main()
{
int r = 3, c = 4, i, j, count;
int stat[r][c];
int *arr[r];
for (i=0; i<r; i++)
arr[i] = (int *)malloc(c * sizeof(int));
// Note that arr[i][j] is same as *(*(arr+i)+j)
count = 0;
for (i = 0; i < r; i++)
for (j = 0; j < c; j++)
arr[i][j] = ++count; // Or *(*(arr+i)+j) = ++count
for (i = 0; i < r; i++)
for (j = 0; j < c; j++)
printf("%d\n", *(arr+i)+j);
printf("\n\n");
for (i = 0; i < r; i++)
for (j = 0; j < c; j++)
printf("%d\n", *(stat+i)+j);
/* Code for further processing and free the
dynamically allocated memory */
return 0;
}
在此代码中,虽然我们为2D数组动态分配内存,但在4位地址之后为什么占用16个字节的间隙,但是当我们静态分配2D数组时,它就没有这样的...
关于您问题的评论提供了最基本的建议-不用担心malloc将您的内存放在何处。无法保证会以任何顺序进行。它可能会为了进行各种优化或推测而定位分配,并且每次执行可能会有所不同。如果没有其他问题,则在您对malloc的调用之间进行其他内存分配,对空闲的垃圾回收的调用(即使用GC的语言)将影响下一个分配的位置。