トップ  >  リファレンス  >  配列関数  >  ArrayResize
スポンサーリンク
検索
カスタム検索
リファレンスツリー
オススメ

天才数学者のエドワード・オークリー・ソープの物語とジョン・ケリーの公式は必見です。
ArrayResize


ArrayResize


最初の次元のサイズを変更します。

関数書式:
int  ArrayResize(
   void&  array[],              // 変更する配列(参照渡し)
   int    new_size,             // 新しい配列サイズ
   int    reserve_size = 0      // 予備サイズ(過剰)
   );



■引数
引数名 初期値 I/O 詳細
array[] - Out サイズ変更する配列
new_size - In 最初の次元の新しいサイズ
reserve_size 0 In オプションパラメータ。
予備の物理メモリを取得します。


■戻り値
正常に実行された場合は、サイズ変更された配列に含まれる全要素数を返します。
それ以外は-1を返し、配列サイズは変更されていません。

■備考
この関数は動的配列に適用する事が出来ます。

SetIndexBuffer()関数によってインジケータバッファの様に割り当てられた動的配列のサイズは、変更する事が出来ません。
インジケータバッファは、ターミナルのランタイムサブシステムによってサイズ変更の処理が実行されます。

配列内の要素の合計は2147483647を超える事は出来ません。

メモリ割り当てを頻繁に行う場合、物理的なメモリ割り当ての数を減らす為、reserve_size(三番目の引数)を使用する事をお勧めします。

ArrayResize()関数の呼び出した後は、メモリの物理的な再配置は行われません。
しかし、予備メモリ内で最初の次元配列のサイズ変更だけは行えます。
これは3番目の引数が、物理メモリの割り当てにのみ使用される事を忘れてはいけません。
例えば

例:
    ArrayResize(arr,1000,1000);

    for(int i=1; i<3000 ;i++) {
        ArrayResize(arr,i,1000);
    }

上記例では、メモリは2回割り当てられる事になります。
最初の割り当ては、ループ処理に入る前に行われます(配列サイズ:1000)。
2回目の割り当てはループ処理のiが2000になった時に行われます。
最終的に2回だけメモリ割り当てが行われます。

3番目の引数を省略して予備の物理メモリ割り当てを行っていなかった場合、
物理メモリの再配置を2000回(iが1000〜2999の時)行う為、プログラムが遅くなります。

スポンサーリンク



Copyright ©2015 MT4でEA自作しちゃお〜 All Rights Reserved.


Top

inserted by FC2 system