StringBufferLen関数の働き・役割
StringBufferLen関数は、指定された文字列に割り当てられたバッファのサイズを返します。バッファとは、データを一時的に保存するためのメモリ領域のことです。
この関数を使用すると、文字列の現在のバッファサイズを確認でき、メモリ管理やパフォーマンス最適化に役立てることができます。
文字列型のバッファの仕組み
MQL5では、文字列型変数は、データを保持するための「メモリ」バッファを持っています。
新しい文字列を追加するとき、既存のバッファサイズが十分でない場合、システムは自動的に新しい大きなメモリ領域を割り当て、そこにデータをコピーします。
このプロセスをメモリの再割り当てと呼びます。
バッファサイズが十分であれば、メモリの再割り当ては行われません。この仕組みは、メモリの効率的な使用とパフォーマンスの最適化に寄与します
StringBufferLen関数の戻り値について
StringBufferLen関数の戻り値は以下の通りです:
※定数についての詳細は↓の記事をご参照ください
- -1:-1が返される場合、文字列がMetaTrader5のシステムによって管理されていることを意味します。
MetaTrader5のシステムによって管理されている文字列は、通常、プラットフォームの内部で使用される定義済みの文字列です。
これらの文字列は直接操作することを想定していないため、バッファの内容を変更する試みは意図しない動作を引き起こす可能性があります。
例えば、エラーメッセージやシステムログに使用される固定のメッセージがあります。これらのメッセージはプログラムの他の部分で参照される可能性があるため、これらの文字列の内容を変更すると、プログラム全体に影響を与える可能性があります。このような場合、StringBufferLen関数は-1を返します。 - 正の整数:割り当てられたバッファのサイズ(文字数)。
StringBufferLen関数を使ったサンプルコード
以下は、StringBufferLen関数を使って文字列のバッファサイズを取得するサンプルコードです。
// スクリプトの実行開始時に自動的に呼び出されるOnStart関数
void OnStart()
{
// 文字列を定義
string a = "こんにちは";
string b = "世界";
// StringBufferLen関数を使用してバッファサイズを取得
Print("before: StringBufferLen(a) = ", StringBufferLen(a),
" StringLen(a) = ", StringLen(a));
// 文字列を追加
for(int i = 0; i < 1000; i++)
{
StringAdd(a, b);
}
// 文字列追加後のバッファサイズを取得
Print("after: StringBufferLen(a) = ", StringBufferLen(a),
" StringLen(a) = ", StringLen(a));
}
- OnStart関数:スクリプトが開始されたときに自動的に実行される関数。
- string型:文字列を表すデータ型。
- Print関数:エキスパートログにメッセージを出力するための関数。
- StringAdd関数:文字列を追加する関数。
- StringBufferLen関数:文字列のバッファサイズを取得する関数。
- StringLen関数:文字列の長さ(文字数)を取得する関数。
このサンプルコードでは、StringBufferLen関数を使用して「こんにちは」という文字列のバッファサイズを取得し、その後「世界」を1000回追加してから再度バッファサイズを確認しています。結果はエキスパートログに出力されます。
<参照>
StringAdd関数/StringCompare関数/StringLen関数/StringConcatenate関数/StringFill関数/StringInit関数/StringFind関数/StringGetCharacter関数/StringSetLength関数/StringReplace関数/StringReserve関数/StringSetCharacter関数/StringSplit関数/StringSubstr関数/StringToLower関数/StringToUpper関数/StringTrimLeft関数/StringTrimRight関数