に特定のサイズを持っている:それはブロックのサイズであるblock_size
を持って私はこのように動作しますIO操作のためのC++フレームワーク(私は変更できないことを)与えられていたメモリ
- をそれは、それぞれのリード/ライト動作は、この操作構造体を取得します
- 読み取りまたは書き込みさ:
struct Operation { size_t block; // index of external memory block void * data; // here the data will be written or read from }
実際の読み取りまたは書き込み、次のようになります
Operation o; o.block = 42; // index of block i want to read from o.data = // where i want the data to end up io.read(o);
問題は、読み取り/書き込みがmemcpy
で実装されており、それは常にblock_size
バイトのブロックを移動していることです。しかし、この外部メモリにクラスX
を保存してロードしたいときには、おそらくsizeof(X) != block_size
が原因で問題が発生します。
だから私はこれを行うだろうというとき:私は必要以上のバイトは、おそらくスタックを破壊、読み込まれますので、私は、読み取り中に問題を持っているsizeof(X) < block_size
場合
X x; Operation o; o.block = 42; // index of block i want to read from o.data = &x; io.read(o); io.write(o);
。 sizeof(X) > block_size
書き込み中に問題が発生した場合は、X
のすべてのバイトが書き込まれるわけではないので、バックアップが不完全です。
X
の1つのインスタンスに対してそれぞれのブロックを使用したいと思います。sizeof(X) < block_size
を確認することができます。一部のパディングバイトをX
に追加する方法はありますか?正確にはblock_size
バイトですか?
'block_size'はコンパイル時に知られていますか? –
内部的にパディングを追加するオブジェクトアロケータが役に立ちます。 – felix
@FabioTuratiはいblock_sizeはコンパイル時定数です。 – Jeysym