私は現在、Cで非常に単純なJSONパーサーを実装しています.可変文字列を使用できるようにしたいと考えています. 私の現在の方法は次のとおりです。
char * str = calloc(0, sizeof(char));
//The following is executed in a loop
int length = strlen(str);
str = realloc(str, sizeof(char) * (length + 2));
//I had to reallocate with +2 in order to ensure I still had a zero value at the end
str[length] = newChar;
str[length + 1] = 0;
私はこのアプローチに満足していますが、毎回1文字しか追加していないことを考えると、少し非効率的だと思います(議論のために、文字列の最終的な長さを見つけるために先読みはしていません) . 別の方法は、リンクされたリストを使用することです。
struct linked_string
{
char character;
struct linked_string * next;
}
次に、処理が完了したら、長さを見つけ、char *
適切な長さを割り当て、リンク リストを反復処理して文字列を作成します。
ただし、各文字と次の文字へのポインターの両方にメモリを割り当てる必要があるため、このアプローチはメモリ効率が悪いようです。したがって、私の質問は 2 つあります。
- リンクされたリストを作成してからC文字列を作成する方が、毎回C文字列を再割り当てするよりも高速ですか?
- もしそうなら、得られた速度は、より大きなメモリオーバーヘッドに見合う価値がありますか?