在存储运行时数据(如缓冲区)时,哪种方式更好:堆(malloc)、栈(例如函数内的char buf[BUFSIZE]
)还是bss段(全局区域中的char buf[BUFSIZE]
)?
在存储运行时数据(如缓冲区)时,哪种方式更好:堆(malloc)、栈(例如函数内的char buf[BUFSIZE]
)还是bss段(全局区域中的char buf[BUFSIZE]
)?
struct s_foo
{
char buf[BUFSIZE];
...
};
struct s_foo *foo_create (...);
void foo_destroy (struct s_foo *foo);
void foo_action (struct s_foo *foo);
这使您可以同时拥有任意数量的foos,每个都有自己的缓冲区,彼此独立。此外,在不使用静态变量的情况下,缓冲区内容在调用之间保持不变。
显然,由于大小受限,堆是不可行的。我也不会选择静态变量,因为它们不可重入并且在递归中会带来混乱。所以,将其放在堆栈帧中。
void f(...) {
char buf[BUFSIZE];
}
顺便说一下,除非绝对必要,否则最好避免使用静态或全局变量。
BUFSIZE
太大怎么办? - user1150105