1

Cプログラムで「一時文字列オブジェクト」を使用することは可能ですか?

たとえば、char * オブジェクト (構造体の一部) のかなり大きな配列があり、現在ヒープに割り当てられたメモリを使用しています。これらの名前のほとんどは、明示的な文字配列を使用せずに決定できるため (すべてではありませんが)、プログラムのメモリ使用量を削減する機会があります。

C++ では、std::string オブジェクトを (値で) 返す API を作成するだけで済みます。C では、わくわくするソリューションを思いつくことはできません。アドバイス?


要求されたコードは次のとおりです。

struct FOO {
    char *name;
    ...
 };

extern FOO* global_foo_array; /* in .h file */

void setup_foo(void) {
    int i;
    global_foo_array = (FOO*) malloc ( get_num_foo() * sizeof(FOO) );

    for (i = 0; i < get_num_foo_with_complex_name(); ++i) {
        global_foo_array.name[i] = malloc ( ... );
    }

    for (i = get_num_foo_with_complex_name(); i < get_num_foo(); ++i) {
        char buf[100];
        sprintf( buf, "foo #%d", i );
        global_foo_array[i].name = strdup( buf );
    }
}

get_num_foo() は、get_num_foo_with_complex_name() よりも約 100 ~ 1000 倍大きくなります。ほとんどの場合、プログラムは「global_foo_array[].name」を読み取り専用として扱います。

ここで無視できないメモリ節約が見られ、人的投資のバランスを取りながら、その節約を達成するための最良の方法は何か疑問に思っています。

4

1 に答える 1