ホーム » 2004 » 5月 » 13

日別アーカイブ: 2004年5月13日

2004年5月
« 4月   6月 »
 1
2345678
9101112131415
16171819202122
23242526272829
3031  

最近の投稿(電子情報)

アーカイブ

カテゴリー

画像処理の環境整備(IEEE1394)

卒研やシステム設計(演習)にて、Linux を交えた画像処理関連の機会が増えそう。 今年度新規導入の演習室のパソコンに、IEEE1394 PCI ボードを追加し、 高速画像データで取得し、処理するシステムを構築したい。

んで、ひとまず Linux の環境整備。

# apt-get install
kernel-image-2.4.26-1-k7/testing
initrd-tools/testing cramfsprogs/testing
# apt-get install `cat testing.pkg`

testing.pkg

ヒープメモリ関連の説明

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

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

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 ] ) ;