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文件和文本切断 - 它不会像我想的那样永远继续下去 - - =。
答案 0 :(得分:2)
动态分配的char缓冲区的唯一最大大小是可用的系统内存。
堆栈上的缓冲区大小受最大堆栈大小的限制。这将根据主机操作系统的不同而有很大差异。
在将数据写入文件时,您是否正在检查fwrite返回的大小并重复调用它以在必要时写入缓冲区的剩余部分?
答案 1 :(得分:2)
具体来说,“C”中没有具体的最大尺寸。 C平台上任何对象的理论(或“潜在”)最大大小由实现决定,通常源自底层机器平台和操作系统的属性。
在具有平坦内存模型的平台上,它通常会受到理论上地址空间大小的限制,以及实际可用内存空间(或特定类型)的大小。
在具有分段内存模型的平台上,它可能受到段大小的限制,该段大小小于地址空间大小。虽然实现可以通过在代码中“模拟”平面内存模型来自由地突破该限制。因此,在这样的平台上,最大对象大小也可能取决于编译设置。
答案 2 :(得分:-1)
您的代码中有内存泄漏!
永远不会释放以下内存:
name_added = vmalloc(strlen(input) + 1 + 14);
我不明白为什么要为输出分配内存。 而且你在堆栈和堆上都做了两次。
调用者为输出提供了缓冲区。 使用它! 不要创建副本!
答案 3 :(得分:-3)
我说它至少能够处理1000个独特的字符