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」を読み取り専用として扱います。
ここで無視できないメモリ節約が見られ、人的投資のバランスを取りながら、その節約を達成するための最良の方法は何か疑問に思っています。