3

ビットバケットポインタを持つ方法はありますか?

多くのIO(特に入力関連)システムコールは、特定のサイズのバッファーにデータを返します。ちょっとしたビットバケットポインタを作成するためのトリックや方法はありますか?そうすれば、破棄されるデータの量を受け入れることができます。「chartmp[INT_MAX]」のようなことをするのはおかしいです。私が探している動作は/dev/ nullのようなものですが、ポインターの世界でのみです。

これに期待しないでください....ただ好奇心が強いです。

ありがとう、チェンツ

更新:おそらくmmap-ing / dev/null。私が質問したとき、それを忘れました。

4

7 に答える 7

2

どのIOインターフェースを使用していますか?FILEベースのメソッド(fopen、freadなど)の場合は、同じバッファーを読み取り続け、その内容を無視することができます。C / C ++で何でもできるので、あなたが望むことは確かに可能ですが、あなたが何をしようとしているのかは完全には明確ではありません。たぶんいくつかのコードを投稿しますか?

于 2010-04-25T14:10:54.223 に答える
1

スタック上の一時配列だけでダミーデータを読み取っても大丈夫だと思います。手の込んだ方法を試してみると、CPUキャッシュが無効になり、パフォーマンスが低下する可能性があります。

于 2010-04-25T14:18:01.570 に答える
1

ファイルの場合は、シークしてデータをスキップできます。mmaping /dev/null は、メモリ領域が書き込まれるときにメモリを割り当てて消費します。いずれにせよ、何をしようとしているのかは明確ではありません。

于 2010-04-25T14:56:56.383 に答える
0

割り当てられた単一のページを一連の連続した仮想アドレスにマッピングできます。しかし、ポインターを十分な回数インクリメントすると、最終的には最後から外れます。それを回避することはできません。提供するポインターは、十分にインクリメントされると、重要なものを指すことになります。

呼び出している API がポインターの代わりにイテレーターを受け入れると、イテレーターのインクリメントをノーオペレーションにすることができるため、より良い状態になります。

于 2010-04-25T16:16:39.857 に答える
0

多くの IO (特に入力関連) システム コールは、特定のサイズのバッファにデータを返します。

通常、そのサイズは小さいか、ユーザー指定です。

事前定義された小さいサイズの場合は、スタックにバッファーを割り当て、結果を無視します。

サイズを指定する場合は、ゼロのサイズ指定によってバッファーが無視されるかどうかを確認してください。もしそうなら、それをしてください。そうでない場合は、いくつかの小さなバッファーを割り当て、(必要に応じて) 関数を繰り返し呼び出して、不要なデータをすべてフラッシュします。

おそらく、関数の作成者を書いて、NULL バッファー ポインターを許可するように依頼することもお勧めします。

于 2010-04-25T16:10:56.140 に答える
0

たぶん、あなたが行こうとしている場所を探すことができます。

于 2010-04-25T16:23:56.087 に答える
0

私が思いついた唯一の方法は、プログラム内のすべての仮想メモリを別の疑似プログラム仮想メモリ空​​間に切り替える何らかのシステムコールを作成することです。ただし、疑似メモリ空間は書き込み専用であり、保存されることはありません。次に、「NULL ポインター」への書き込みが完了したら、仮想メモリ空​​間を元に戻します。

例:

  main() 
  {
    int fd = open("file", O_RDONLY);
    null_vm();
    read(fd, NULL, UINT_MAX);
    unnull_vm();
    close(fd);
    return;
  }

ありがとう、チェンツ

于 2010-06-17T13:00:48.990 に答える