2012-01-23 20 views
-1

私は自分自身のメモリマネージャーを書き始めましたが、そのためにはf32(浮動小数点整数)を作成するためのインクルードファイルが必要です。C++ F32インクルードファイル?

私のプログラムにはすでに#include <cstdint>がありますが、私はF32、またはI32のために何が必要かはわかりません。

+3

?そして、「浮動小数点整数」は何ですか?これらの神話的なものはなぜあなたにとって重要なのですか?なぜあなたは "メモリマネージャー"(漠然とした警告)がこれを必要としていると思いますか? –

+0

さて、私はちょうど始める場所が必要です。私が見ている本、Game Engine Architectureはこれらが重要だと思われるようです。作者が実際にこれらを使用しているかどうかは不明ですが、次のように記述します。 struct BestPackaging { U32 mU1; // 32ビット(4バイト整列) F32 mF2; // "" I32 mI4 // "" char * mP6; // "" U8 mB3; // 8ビット(1バイト整列) bool mB5; // 8ビット(1バイト整列) U8 _pad [2]; //明示的な埋め込み }; 私はアライメントされたメモリアロケータを試してみるつもりですが、今のところそれは本当に混乱しています。 – metalgod88

答えて

2

今のよう固定幅の浮動小数点型を取得するための標準化方法はありません私の知る限り - 私は思うの整数タイプとは異なり、floatdoubleは、多かれ少なかれどこでも同じです、ので、(32ビットfloat、64ビットdoubleは、別々に「奇妙な」FPタイプのタイプ)。 、これは完璧に動作します。このように

#include <climits> 
static_assert(sizeof(float)*CHAR_BIT==32, "float is not 32 bit on this architecture, fix the f32 typedef."); 
typedef float f32; 

、「正気」のプラットフォーム上でしばらく「奇妙な:あなたは余分なことを確認したい場合は

それでも、あなたはあなたのtypedefを作成する前に、静的アサートを行うことができます"プラットフォームをコンパイルできず、特定のプラットフォームを追加する機会が与えられますtypedef。 I32については

、それは<cstdint>が含まれており、あなたのtypedefを作成するだけで十分です:あなたは `F32`または` I32`見た

#include <cstdint> 
typedef std::int32_t i32; 
+0

マッテオありがとうございます。私は数年間プログラミングしてきましたが、このようなことは初めて処理したので、あなたのような人に私を助けることは素晴らしいことです。ほんとうにありがとう。 – metalgod88

+0

+1 'limits'と' stdint'は、固定幅の基本型に関して必要なもののほとんどを持つべきです。浮動小数点は、正確な計算を可能にするために、ターゲットマシン上で「十分に大きい」ものでなければなりません。私はサイズを仮定しないでしょう。 'malloc'のときに' sizeof'を使ってください。 – darvids0n

+0

今後の参考として、このウェブサイトには、#を含むすべての用途のリストが掲載されています。 http://publib.boulder.ibm.com/infocenter/comphelp/v9v111/index.jsp?topic=/com.ibm.xlcpp9.aix.doc/standlib/header_cstdint.htm – metalgod88

関連する問題