在非递归函数中,将大型数据类型放置在堆栈上通常是可以的吗?
其中一个方便的地方是在需要清理东西的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语言中,我认为这不是很整洁,对吧?