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用です。この問題は、上記のコードを何度も繰り返してそのバッファに追加し続けることです-最終的にはprocfileを実行し、テキストが途切れます-それは私が望むように永遠に続くことはありません)-=。

4

4 に答える 4

2

動的に割り当てられたcharバッファーの最大サイズは、使用可能なシステムメモリーのみです。

スタック上のバ​​ッファのサイズは、最大スタックサイズによって制約されます。これは、ホストOSによって大きく異なります。

ファイルにデータを書き込むときに、 fwriteによって返されるサイズを確認し、必要に応じてそれを繰り返し呼び出して残りのバッファーを書き込みますか?

于 2012-10-27T17:54:12.683 に答える
2

特に「Cで」具体的な最大サイズはありません。C プラットフォーム上の任意のオブジェクトの理論上の (または「潜在的な」) 最大サイズは、実装によって決定され、通常は基盤となるマシン プラットフォームと OS のプロパティから導出されます。

フラットメモリモデルのプラットフォームでは、通常、理論上はアドレス空間のサイズによって制限され、実際には利用可能な空きメモリ (またはその特定の種類) のサイズによって制限されます。

セグメント化されたメモリ モデルのプラットフォームでは、アドレス空間のサイズよりも小さいセグメント サイズによって制限される場合があります。実装は、コード内でフラット メモリ モデルを「エミュレート」することによって、その制限を自由に破ることができます。そのため、このようなプラットフォームでは、オブジェクトの最大サイズもコンパイル設定に依存する可能性があります。

于 2012-10-27T18:04:38.953 に答える
-1

コードにメモリリークがあります!

次のメモリが解放されることはありません。

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

なぜ出力にメモリを割り当てるのかまったくわかりません。そして、スタックとヒープの両方で2回実行します。

呼び出し元は、出力用のバッファーを提供しました。これを使って! コピーを作成しないでください!

于 2013-01-04T14:05:50.107 に答える
-3

少なくとも1,000のユニークな文字を処理できると思います

于 2012-10-30T17:41:11.567 に答える