在C中,我们可以分配内存automatically或dynamically
size_t foo = 128;
char str1[64]; // Automatic
char str2[foo] // Automatic (variable-length, C99)
char *str3 = malloc(64); // Dynamic
char *str4 = malloc(foo); // Dynamic
对于自动分配,变量的作用域是有限的,内存通常是在堆栈上分配的,而动态分配使用堆。
让我们继续使用字符串,假设函数应该返回它以某种方式创建的字符串。似乎有两种常见的做法,都可以在标准库函数中看到:
获取缓冲区和大小,然后使用malloc()
将缓冲区写入到提供的buffer
第一种方法的优点是我们不需要记住free()
内存。另一方面,我们需要提交两个额外的参数,并以某种方式从外部确定缓冲区应该有多大:
char str1[128]; // Let's hope this is large enough!
fill_my_buffer(str1, 128); // Might need more than 128, who knows
char *str2 = return_a_ptr(); // Just give me a pointer
size_t len = strlen(str2); // Ah, so that's what we got!
在C中选择自动或动态内存分配时,应该考虑哪些(其他)考虑因素?
这个问题是以意见为基础的,但我相信应该可以为这两种方法编制一个客观利弊的综合列表,这样就可以在个案的基础上做出明智的决定。
https://stackoverflow.com/questions/50667681
复制相似问题