2016-09-02 4 views
0

複数のプログラムでかなりの時間を費やした結果、プラットフォームによっては、一部のプラットフォームではリソースが非常に限られているため、大幅に増加しています。私は通常、これらの型の点で大規模なマップと行列を格納するので、int32からint16またはfloatからdoubleへの切り替え(実際にはサイズが異なる場合)は、私の使用量をほぼ半減させます。など したがって、私はちょうど追加した再定義:これは私はすぐに私のプログラムでは、すべての重要なプリミティブ型を調整することができますRAM使用量の迅速な変更、より良い可読性、および(場合によってはパフォーマンスの改善のための)プリミティブ型の再定義

typedef double Float; 
typedef int32_t Int; 
typedef uint32_t UInt; 

。プログラムの私の整数は実際には2バイト整数のサイズを超えないので、int16からint64のいずれかを使用しても問題はありません。

さらに、「uint32_t」の代わりに「Int」があるだけで読みやすいようです。そして、いくつかのケースでは、プリミティブ型のサイズを小さくしてサイズを大きくすることで、パフォーマンスの変化を観察しました。

私の質問です:私は単に欠場する欠点はありますか?私はまだこの話題について何も見つけることができませんでしたので、もし私もそれを見逃してしまったら、そこに私を導いてください。コードは主に私のためのものですが、他の人がそれを見るかもしれませんが、私は個人的に、あるいは適切な文書ですべての場合を与えます。

編集:過去の間違いで申し訳ありませんが、私は実際にtypedefを使用します。

+0

小さなタイプを使用するにはg++ -o test test.cpp -DLARGE

をtypedefに。境界を確認する場合は、numeric_limitsを使用し、ハードコードしないでください(一般的には常に良い)。小さい方にタイプを変更すると、境界も変更されます。 – Hayt

+0

@Haytコメントありがとうございます。はい、一般的に数値制限を使用することを考えました。しかし、私が手に入れる最大の整数は約2000〜3000であり、私のプログラムでこれを超える方法はありません。浮動小数点の場合も同様です。 – phil13131

+0

小さいタイプの境界を決して超えない場合は、無条件で使用しない理由がありますか?また、近代的なアーキテクチュアにInt型を秘密裏に16ビットしか持たないという考えは私を恐れている。 –

答えて

2

typedef int32_t Int;は不良ではありませんが、typedef double Float;は良くありません。それは混乱しているので、Floatは、実際にはダブルです!

なぜタイプの二組、タイプの一つであり、タイプのいずれかを定義するためにプリプロセッサを使用しません。

#ifdef LARGE 
typedef int32_t Int; 
typedef double Real; 
#else 
typedef int16_t Int; 
typedef float Real; 
#endif 
void f() { 
    cout << sizeof(Int) << endl; 
    cout << sizeof(Real) << endl; 
} 

種類使用するには:他の人とコードを共有する際にそれらが使用されていないので、私は見ることができました「欠点」があるだけでなくg++ -o test test.cpp

+0

私はプリプロセッサの定義のように定義します。私はそれを少し調整しなければならないでしょう。なぜなら、小さなものだけが常にそれをカバーするわけではないからです。 「Real」はさらに、非常に優れた名前ですが、これまでFloatPtという名前で呼ばれていましたが、一般的な浮動小数点を参照していますが、「Real」は実際より優れています。 – phil13131

関連する問題