今回C言語の変数についていくつか質問させて頂きます。(初歩的で申し訳ありません・・・)
以下長文になりますが。
1.変数宣言位置の効率について。
・ゲームに限らずプログラム内では多くの変数を使用しますが、
いろいろな関数で使用する変数(敵データの構造体配列、弾データの構造体配列など)を宣言するのに、
グローバル変数として宣言するのと、staticで静的ローカル変数として宣言するのと、
どちらがメモリ効率が良いのでしょうか?
簡単に考えると、前者なら変数の関数間受け渡しを考えなくても良いし、
後者ならオブジェクト化とまでは行かなくても、ある程度処理を分けれるので、
保守的な面でメリットがあるかなと・・・
どちらで宣言してもメモリ効率の違いが無いのであれば、後は個人の好みの問題ですが、
違いがあるのであればと思いまして・・・。
2.変数の有効範囲について。
・自作関数内で構造体データをmallocで確保した場合、そのメモリ領域を示すポインタ変数は、
関数から出た時点で破棄される訳ですが、確保したメモリ領域はfreeで開放するまで残っていますよね?
仮に
struct DATA_t{
int x;
int y;
};
void init( void );
int main(){
init();
return 0;
}
void init( void ){
struct DATA_t *p;
p = ( struct DATA_t* )malloc( 10 * sizeof( struct DATA_t ) );
}
上記の場合init関数内のポインタ変数pは、関数を出た時点で破棄されるので、確保された領域の
アドレスが迷子になります。(迷子になるんだと思っています・・・)
これは、
struct DATA_t{
int x;
int y;
};
struct DATA_t* init( void );
int main(){
struct DATA_t *p;
p = init();
実際の処理・・・・
free( p );
return 0;
}
struct DATA_t* init( void ){
struct DATA_t *p;
p = ( struct DATA_t* )malloc( 10 * sizeof( struct DATA_t ) );
return p;
}
こうすれば関数内で確保したメモリ領域を他の関数でも使用できるのでしょうか?
C言語(File拡張子は.cppです)
VS C++ 2008EE
です。
初歩的な質問で申し訳ありませんが、回答よろしくお願いします。