非再帰的な関数では、大きなデータ型をスタックに置くことは一般的に問題ありませんか?大きなオブジェクトをスタックに置かないでください。
便利な場所は、物事をきれいにする必要のあるC言語の機能です。
私はこのようなデータの任意のパケットを読み書きできるC関数を持っています。
int do_something()
{
char buf[9000];
struct ot_packet_t p;
pkt_init(&p);
pkt_set_type(&p, "WDAT");
pkt_write_uint32(&p, some_var);
pkt_write_data(&p, some_data, some_len);
// other stuff...
// if need to early exit... buf & p cleaned up. An RAII approach.
send_packet(buf, pkt_get_length(&p));
}
私はこの質問にC++でタグ付けしただけでなく、C++にも適用できます。 少なくともC++では、一般にauto_ptrを使用してヒープ上に割り当てられた大きなオブジェクトをクリーンアップします。 Cではこれがきちんと正しいとは思わない?
あなたが想像できるすべての言語にタグを付けるだけではありません。この一般的な質問は、固定サイズのスタックを持つプラットフォーム上のネイティブアセンブラにコンパイルされる言語実装に適用されます。 – Puppy