2016-06-23 14 views
1

私はPythonからCへのインターフェイスを書くことに取り組んでおり、Cのデータ構造はいくつかの変数のサイズの配列です。配列を初期化する前にサイズが定数ではないので、配列の長さはわかりません。C配列を事前割り当てすると、過剰なプロビジョニングが行われますか?

サイズが1000〜1000の範囲であれば、それは悪い習慣ですか? これを行うにはどうすればよいでしょうか? malloc?

コンテキスト:この配列用のポインタは、ネットワーク経由でアプリケーション層プロトコルとして送信されるため、配列としてデータが必要です。

+2

いいえ、いいです。静的割り当てと動的割り当ての長所と短所があります。それらを評価する必要があります。そして、いいえ、それは意見に基づく質問ではありません、完全な情報を与えられれば答えはかなり客観的です。 –

+0

可変長配列(CはC99以降の配列)が必要です。 –

+0

私は 'alloca'をお勧めします –

答えて

6

1000個の要素を割り当てることが、プラットフォーム上で利用可能なメモリを強調するのは、悪い習慣です。 1000個の要素で、サーバやデスクトップマシンではほとんど問題になりません。組み込みシステムでは問題になる可能性があります。 1M以上の要素をあらかじめ割り当てようとしている場合、特に通常の場合が1k要素になる場合は、大規模なマシンであってもそれは恐らく過大ですが、それは完全には明確ではありません。スタックのサイズは限られていますが、グローバル変数はしばしば膨大なものになります。

処理対象のアイテムが1001個あると判明した場合、フォールバックプランとは何ですか?あなたのテストは、行が増えたときの動作を検証するつもりですか?この問題を無視することは受け入れられません。バッファまたは配列のオーバーフローが発生する可能性があります。ダイナミックアロケーションに戻した場合は、ダイナミックメモリアロケーションコードがテストされていることを知っているかのように、ダイナミックにすべてを動的に割り当てる必要があります。余分な要素を拒否するだけで、それがユーザーにとっては妥当である場合は、固定サイズを使用してオーバーフローしないことを確認するだけです。

+0

プロセス**が1000バイトの配列を処理しなければならない場合、1000バイトの配列を使用すると、システム上で使用可能なメモリが強調されますが、システムは仕様を満たしていません。 –

+0

@andrew Henle:平均的なニーズとピークの必要性のために設計しており、ほとんどの場合100の要素を処理するだけで大​​丈夫だと思うなら。あなたの環境に応じてmallocもかなりのオーバヘッドを生み出しています。平均的なものと大量のものとを区別するために10のオーダーを話しています。 – Haini

関連する問題