gpt4 book ai didi

c - 自动与动态内存分配 : what to consider?

转载 作者:太空狗 更新时间:2023-10-29 15:25:31 27 4
gpt4 key购买 nike

<分区>

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

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

使用自动分配,变量的范围有限,内存通常分配在堆栈上,而动态分配使用堆。

让我们坚持使用字符串,假设一个函数应该返回它以某种方式创建的字符串。似乎有两种常见的做法,都可以在标准库函数中看到:

  1. 获取缓冲区和大小,然后写入提供的缓冲区
  2. 使用malloc() 分配一个缓冲区并返回指向它的指针

第一个的优点是我们不需要记住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 中选择自动或动态内存分配时,应考虑哪些(其他)注意事项?


这个问题以基于意见为基础而结束,但我相信应该可以为这两种方法编制一份全面的目标优缺点列表,然后就可以做出明智的决定视具体情况而定。

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com