面试题答案
一键面试可以使用预先分配足够大的缓冲区的策略,避免在处理过程中频繁分配内存。以下是代码实现:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 假设最大可能的数据长度
#define MAX_DATA_LEN 1024 * 1024
void process_data(char *input, size_t len) {
// 预先分配足够大的缓冲区
char *output = (char *)malloc(MAX_DATA_LEN);
if (output == NULL) {
fprintf(stderr, "Memory allocation failed\n");
return;
}
// 这里开始数据处理,假设简单的复制操作作为示例
memcpy(output, input, len);
// 数据处理完成,这里可以进行其他操作,如输出到文件等
printf("Processed data: %s\n", output);
// 释放内存
free(output);
}
可以这样调用这个函数:
int main() {
char input[] = "This is some sample data";
size_t len = strlen(input);
process_data(input, len);
return 0;
}
这种策略通过预先分配较大的内存块,减少了内存分配的次数,提高了效率。同时在处理完成后及时释放内存,避免内存泄漏。当然在实际应用中,MAX_DATA_LEN
需要根据具体业务场景合理设置,memcpy
部分也需要替换为实际的数据处理逻辑。