0

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 用于 procfile。这个问题是我不断地用上面的代码一次又一次地添加到那个缓冲区 - 最终我ca我的procfile并且文本被切断了 - 它不会像我想要的那样永远持续下去)-=。

4

4 回答 4

2

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

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

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

于 2012-10-27T17:54:12.683 回答
2

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

在具有平面内存模型的平台上,理论上它通常会受到地址空间大小的限制,而在实践中则会受到可用空闲内存(或特定类型)大小的限制。

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

于 2012-10-27T18:04:38.953 回答
-1

您的代码中有内存泄漏!

以下内存永远不会被释放:

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

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

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

于 2013-01-04T14:05:50.107 回答
-3

我会说它至少能够处理 1,000 个独特的字符

于 2012-10-30T17:41:11.567 回答