C中char缓冲区的最大大小?

时间:2012-10-27 17:51:41

标签: c char

char缓冲区有最大大小吗?我有一个程序,它收集char缓冲区的字符串并将其写入proc文件。在某一点之后它似乎停止写东西 - 那里有太多东西吗?什么是最大尺寸所以我可以解决这个问题?

这是代码。这是一个LKM - 来自内核空间的limits.h吗?

为本:

const char* input = "hooloo\n";

下一步:

int read_info( char *page, char **start, off_t off, int count, int *eof, void *data )
{

    unsigned int mem;
    char answer_buf[strlen(input) + 1 + 14];
    name_added = vmalloc(strlen(input) + 1 + 14);
    strcpy(name_added, input);
    strcat(name_added, extension);
    mem = sprintf(answer_buf, "%s\n", name_added);
    memcpy(page, answer_buf, mem);
    return strlen(answer_buf) + 1;
}

我的代码中的所有东西都是这样的东西,它们将缓冲区重新加载并添加到缓冲区中。此外,read_info用于proc文件。这个问题是我继续用上面的代码一遍又一遍地添加到缓冲区 - 最终我将我的proc文件和文本切断 - 它不会像我想的那样永远继续下去 - - =。

4 个答案:

答案 0 :(得分:2)

动态分配的char缓冲区的唯一最大大小是可用的系统内存。

堆栈上的缓冲区大小受最大堆栈大小的限制。这将根据主机操作系统的不同而有很大差异。

在将数据写入文件时,您是否正在检查fwrite返回的大小并重复调用它以在必要时写入缓冲区的剩余部分?

答案 1 :(得分:2)

具体来说,“C”中没有具体的最大尺寸。 C平台上任何对象的理论(或“潜在”)最大大小由实现决定,通常源自底层机器平台和操作系统的属性。

在具有平坦内存模型的平台上,它通常会受到理论上地址空间大小的限制,以及实际可用内存空间(或特定类型)的大小。

在具有分段内存模型的平台上,它可能受到段大小的限制,该段大小小于地址空间大小。虽然实现可以通过在代码中“模拟”平面内存模型来自由地突破该限制。因此,在这样的平台上,最大对象大小也可能取决于编译设置。

答案 2 :(得分:-1)

您的代码中有内存泄漏!

永远不会释放以下内存:

name_added = vmalloc(strlen(input) + 1 + 14);

我不明白为什么要为输出分配内存。 而且你在堆栈和堆上都做了两次。

调用者为输出提供了缓冲区。 使用它! 不要创建副本!

答案 3 :(得分:-3)

我说它至少能够处理1000个独特的字符