首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >自动内存分配与动态内存分配:要考虑什么?

自动内存分配与动态内存分配:要考虑什么?
EN

Stack Overflow用户
提问于 2018-06-03 22:52:31
回答 2查看 1.1K关注 0票数 2

在C中,我们可以分配内存automaticallydynamically

代码语言:javascript
复制
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

  • Allocate中,并返回指向它的指针

第一种方法的优点是我们不需要记住free()内存。另一方面,我们需要提交两个额外的参数,并以某种方式从外部确定缓冲区应该有多大:

代码语言:javascript
复制
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中选择自动或动态内存分配时,应该考虑哪些(其他)考虑因素?

这个问题是以意见为基础的,但我相信应该可以为这两种方法编制一个客观利弊的综合列表,这样就可以在个案的基础上做出明智的决定。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50667681

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档