2

現在、別のプラットフォームからいくつかのコードを移植していますが、新しいプラットフォームのboolは1バイトサイズです。値は32ビット値として格納されるため、これはロードコードを壊しています。さらに、速度はプラットフォームの重要な問題であり、プロセッサは32ビットでネイティブに実行され、32ビット以外のboolを比較するには追加の操作が必要になるため、32ビットのboolを使用したいと考えています。

gccに8ビットboolの代わりに32ビットboolを使用させる方法はありますか?

4

5 に答える 5

6

gccに追加#define BOOL_TYPE_SIZE 4して再コンパイルします;)gcc/config/i386/i386.h

于 2010-12-15T04:08:36.330 に答える
3

boolのサイズは実装定義(5.3.3)であり、gccは実行時にこれを構成するオプションを提供していないようです。

うまくいけば、実装定義のコードは分離されています。その場合は、boolsをintsに変更するか、ロードコードを変更して、4ではなくsizeof()==1を処理します。

(または、クレイジーな場合は、gccを変更してboolを4バイト型として扱います。)

編集:Paul Tomblinの使用の提案は#define合法ではないかもしれません[ここを参照]が、少なくともgcc4.1.2では機能します。[リンク]ただし、サイズの不一致をすべて使用しないboolと、ほぼ確実に噛み付きます。

于 2010-12-15T02:56:37.060 に答える
2
#define bool int
于 2010-12-15T02:47:12.990 に答える
1

int32_t内部で使用するが、のように動作する独自のクラスを作成できますbool。これは、そのタイプを具体的に使用するフィールドの名前を変更する必要があることを意味します。これは、より多くの作業ですが、より優れた制御と分離を提供し、他の場所でも実際boolのを使用できます。個人的には、予期しない場所で噛み付く可能性のある#defineハッカーよりもそれを好みます。また、32ビットintが1バイトよりも便利に高速であると想定しないように注意します...パイプライン、メモリレイテンシ、キャッシュサイズなどの他の要因により、違いがわずかになるか、32ビットintが遅くなる可能性があります。代表的なデータ処理を使用して、システムでベンチマークを行うことができます。

于 2010-12-15T04:04:57.483 に答える
1

内部データ構造をストレージ/ロードコードから分離する必要があります。プラットフォームのネイティブboolタイプの内部データ構造にboolを格納し、データの読み取り/書き込み時にストレージの1バイトboolとの間で適切な変換を行うだけです。

于 2010-12-15T08:16:17.047 に答える