プログラムを実行していて、途中で止まってしまいます
変な止まりかただったので、タスクマネージャーを起動して調べると、
起動してからのパフォーマンスにおけるメモリ使用量があっという間に 750MBから1.95GBへ(約2分間)
コードは下に書きますが、自作関数、自作マクロがたくさんありまして、
そのまま載せても意味不明ですから、構造のみを書きます
#include "mine.h" #include <stdio.h> void funcX( int *A ); void funcY( int *A, int *B ); void funcZ( int *B, int *C, int *D, int *E ); void handle_array( void ) { int A [6000]; int B [6000]; int C [6000]; int D [6000]; int E [6000]; int td, shif; for( td = -24; td <= 24; td ++ ) { printf( "td = %d\n", td ); if( td >= 0 ) { for( shif = 0; shif <= 24 - td; shif ++ ) { funcX( A ); funcY( A, B ); funcZ( B, C, D, E ); } } else // td < 0. { for( shif = -td; shif <= 24; shif ++ ) { funcX( A ); funcY( A, B ); funcZ( B, C, D, E ); } } } } void funcX( int *A ) { // A を定義 } void funcY( int *A, int *B ) { // A をベースに、B を作成 } void funcZ( int *B, int *C, int *D, int *E ) { // B をベースに、C, D, E を作成 }調べたところ、
配列を引数として渡すとき、実引数のコピーオブジェが作成されて...
それが膨大なスタックを消費して...
などとありました
しかし、sizeof( int ) = 4 byte で * 6000 = 24,000 byte で = 24 KB...
たとえコピーオブジェが作成されたとしても、なんら問題がないとは思うのですが。
[6000]程度の配列を引数として渡すことは問題なのでしょうか?
よろしくお願いします