従来のDelphi 7プログラムの一部のコードを見直しながら、どこにでもpacked
と記されているレコードがあることに気付きました。これは、もちろん、レコードがバイト単位で格納され、CPUがアクセスするためにより速くなるようにアライメントされていないことを意味します。パッキングは、コンパイラや何かの裏をかくための試みとして、盲目的に行われているようだ - たとえばレコード基本的に代わりに高速アクセスのメモリの数バイトを大切「パックされた」レコード以外のものは修正する必要がありますか?
:
TFooTypeRec = packed record
RID : Integer;
Description : String;
CalcInTotalIncome : Boolean;
RequireAddress : Boolean;
end;
私はこの問題を解決すべきであり、すべてのレコードを正常にするか、あるいは「梱包しない」ようにしますか?あるいは、現代のCPUとメモリでは、これはごくわずかですが、恐らく時間の無駄でしょうか?開梱によって何か問題がありますか?
この例でも、アンパックを実行してもアクセスが高速になるわけではありません。最初の2つのフィールドはすでに整列されており、ブール値はバイトであり、整列する必要はありません。そして、より大きなスキームでは、データがCPUキャッシュにもはや適合しなくなった場合、より大きな整列構造の効率が低下する可能性があります(L1は現在のCPUではわずか数十キロバイトです)。したがって、潜在的にパフォーマンスが低下する可能性があるコードを破る危険性があります。 –