0

パディングは C++ 標準では指定されていません。コンパイラと CPU に依存します。パディングを手動で回避すると、パフォーマンスの問題や悪化につながる可能性があります。したがって、パディングの内容を制御することは、セキュリティなど、パディングによって引き起こされる望ましくない副作用を最小限に抑えるためのより実行可能な方法のようです。

私がやりたいことは、整列されたPODにゼロのパディングを持たせることです。例: テンプレート化された関数template<typename T> T zero_padding(T const & pod);

しかし、問題があります。

  1. C標準では何も保証されていないため、直接structコピーすると、パディングで何が行われるかわかりません。
  2. memset構造体を作成してから、メンバーごとのコピーを実行できます。しかし、それは構造固有のようで、テンプレートでは簡単に実行できません。

だから私はこれを行う簡単な方法を見つけることができないようです.

4

2 に答える 2

0

memcpy構造体のバイトをコピーするために使用します。これにより、パディング バイトがコピーされます。合法性はmemcpy、POD コンセプトの要点のようなものです。

コピー操作でゼロ化されたパディングが確実に生成されるようにするには、すべての元のオブジェクトがゼロ化されたパディングで初期化されていることを確認してください。C++ は、値の初期化を実行するときに、POD のパディング ビットをゼロに初期化し= T()ます{}。または、必要に応じて を使用できますmemset

于 2013-08-28T03:49:25.277 に答える