連続するアドレスをいかに確保するか

配列を扱うために、仮想アドレス空間に特定の領域を確保するときは、一般に配列を宣言するときに同時に静的に確保する方法と、mallcを用いて動的に確保し、freeで開放する方法の二つが存在します。

今回は、これら二つの方法を用いたプログラムを検討しました。


// array_static.c
#include<stdio.h> // printf
#define LENGTH 10
int main(void)
{

//配列の宣言と同時に、特定の大きさだけ仮想アドレス空間内に確保している。
int array[LENGTH];
int i;

for(i =0; i<LENGTH; i++)
{
array[i] = i * 3;
}

for(i = 0; i<LENGTH; i++)
{
printf("array[%d]=%d\n", i, array[i]);
}
}





// array_dynamic.c
#include<stdio.h> // printf
#include<stdlib.h> // malloc
#define LENGTH 10

int main(void){
int *array;
int i;

/*mallocにより(int型の大きさ)× LENGTHだけの値を与える。
戻り値は、mallcにより確保された領域の先頭のアドレスである。
*/
array = (int *) malloc (sizeof (int) * LENGTH);

for(i = 0; i < LENGTH; i++)
{
array[i] = i * 3;
}
for(i = 0; i < LENGTH; i++)
{
printf("array[%d]=%d\n", i, array[i]);
}
//確保したメモリ領域を開放。
free(array);

return 0;
}