我有:
char *data = malloc(file_size+1);
我也有char *string = "string1"
之类的字符串。
我希望每当我要将另一个字符串添加到数据时,就能将内存重新分配给数据。在C中做这个的最好方法是什么,我已经看过其他方法,比如使用file_size * 2,但是,这会浪费内存,添加字符串长度时最好的方法是什么记忆。这适用于简单的桌面应用程序。
答案 0 :(得分:2)
这非常取决于你想要优化的内容,而且这里很难回答,因为你没有多说“最佳”对你意味着什么,即约束是什么。
对于在桌面或服务器计算机上运行的通用程序,我从头开始过度分配,以避免必须调用realloc()
,并且每次溢出时通常会将分配加倍。在需要之前,内存可能不会被(物理上)使用,所以为什么要尝试“保存”呢?
如果分配将是长期的(几天或几周),那么尝试更加保守可能是有意义的。如果连接数很少,则可能不会。等等。
答案 1 :(得分:0)
您可以使用realloc
为现有动态分配的缓冲区分配更多内存。此外,您对字符串文字的指针应该是const
限定的,因为它们是只读的。
const char *string = "string1"
char *data = malloc(strlen(string) + 1); // +1 for the null byte
strcpy(data, string)
const char *string2 = "hello";
char *temp = NULL;
// +1 for the terminating null byte
int newsize = strlen(data) + strlen(string2) + 1;
// realloc returns NULL in case it fails to reallocate memory.
// save the value of data in temp before calling reallocate
temp = data;
data = realloc(data, newsize);
// check for failure of realloc
if(data == NULL) {
printf("realloc failed\n");
data = temp;
// handle it
}