c - 内存占用优化与性能

标签 c string memory c99

我担心加载大量字符串的 C99 应用程序的内存占用。我有字符串长度的上限,我基本上做这样的事情(这个语句在循环中):

char* input = (char*)malloc(sizeof (char)* MAX_CHAR_INPUT_SIZE);
scanf_s("%s", input, MAX_CHAR_INPUT_SIZE);

如您所见,如果用户提供的字符串很小,则会浪费大量内存。我唯一的想法是在读取后将该字符串复制到大小合适的内存块,然后释放更大的内存块。这是好方法吗? (我知道这将是 O(N))。

也有人可以向我解释这是如何用高级语言解决的吗? (例如 C# 的 Console.Read())

最佳答案

如果你在循环中执行它,那么你可以在为最终字符串分配内存之前将其读入临时文件:

char input[MAX_CHAR_INPUT_SIZE];

scanf_s("%s", input, sizeof input);

size_t input_size = strlen(input) + 1;
char *input_final = malloc(input_size);
memcpy(input_final, input, input_size);

这样一来,每个字符串仍然只有一次调用 malloc(),但每次都分配完全正确的大小。

关于c - 内存占用优化与性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20389680/

相关文章:

Java内存之谜(我有泄漏)?

c - 在 yacc 中处理 block

c - __builtin_popcountll 和_mm_popcnt_u64 之间有什么区别?

C - 如何在 C 中使用结构体获取时间

java - java中如何将字符串转换为 boolean 值?

c++ - C++ 中的暴力字符生成

javascript - 日期字符串格式

C程序: Changing the string in a function by using double pointer

memory - 如何使用现有的 Eclipse MAT 索引进行交互式分析

c - 变量地址之间的差异