getcwd() に関するGNU Lib Cのドキュメントによると...
この関数の GNU C ライブラリ バージョンでは、バッファ引数にヌル ポインタを指定することもできます。次に getcwd は、malloc と同様に自動的にバッファーを割り当てます (Unconstrained Allocation を参照)。サイズが 0 より大きい場合、バッファはその大きさです。それ以外の場合、バッファは結果を保持するのに必要なだけ大きくなります。
ここで、GNU ドキュメントで説明されている標準の getcwd() を使用した実装に注目してください。
char* gnu_getcwd ()
{
size_t size = 100;
while (1)
{
char *buffer = (char *) xmalloc (size);
if (getcwd (buffer, size) == buffer)
return buffer;
free (buffer);
if (errno != ERANGE)
return 0;
size *= 2;
}
}
これは、移植性と安定性に優れているように見えますが、メモリの割り当てと解放のすべてが面倒な妥協のようにも見えます。関数が頻繁に呼び出される可能性があることを考えると、これはパフォーマンス上の問題になる可能性がありますか?
*「プロファイリングする」と言うのは簡単ですが、これは考えられるすべてのシステムを説明することはできません。現在または将来。