MST

星途 面试题库

面试题:优化C语言函数内的内存分配策略

假设有一个函数需要处理大量数据,函数原型为`void process_data(char *input, size_t len)`,在函数内部,需要将`input`数据处理后存储到新的内存空间。请设计一种内存分配策略,尽可能避免不必要的内存分配,同时确保数据处理的正确性和效率,并给出代码实现。
20.9万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试

可以使用预先分配足够大的缓冲区的策略,避免在处理过程中频繁分配内存。以下是代码实现:

#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 部分也需要替换为实际的数据处理逻辑。