ホーム » スタッフ » 斉藤徹 » ヒープメモリ関連の説明

2004年5月
 1
2345678
9101112131415
16171819202122
23242526272829
3031  

検索・リンク

ヒープメモリ関連の説明

スタックエリアの使い方。

動的メモリの利用の基礎として、スタックエリアの使い方。

char bigarea[ xxxxx ] ;
char *tail = bigarea ;
char *table[ 100 ] ;
int  size = 0 ;
char buff[ 1024 ] ;
while( scanf( "%s" , buff ) == 1 ) {
table[ size ] = tail ;
strcpy( tail , buff ) ;
tail += strlen( buff ) + 1 ;
size++ ;
}

のコードにて、使用領域と未使用領域の境界を1つの変数で管理する方式の 説明。この方式は、CASL でのスタック等の考え方と同じである点の説明。

int stack[ 100 ] ;
int sp = 0 ;
void push( int x ) { stack[ sp++ ] = x ; }
int pop() { return stack[ --sp ] ; }
}

にて、Last In First Out の概念を説明。これに伴い、alloca() の使い方も 例を示す。

ヒープメモリの使い方

LIFO が、最後に確保した物から、最初に不要になる場合は OK だけど、 そういう場合で無い時の問題点を指摘して、動的メモリとして、 スタックとヒープがある点を説明してから、malloc の説明。

malloc() に、必要メモリサイズを渡すと、確保されたメモリの先頭が 帰ってくること、free() は、不要となったことをしらせ、その領域が 次の malloc() で再利用されることを説明。

while( scanf( "%s" , buff ) == 1 ) {
table[ size ] = (char*)malloc( strlen( buff ) + 1 ) ;
strcpy( table[ size ] , buff ) ; // NULL チェックはこの後に説明した
size++ ;
}
:
for( i = 0 ; i < size ; i++ )
free( table[ i ] ) ;

システム

最新の投稿(電子情報)

アーカイブ

カテゴリー