9

私たちの学校のプロジェクトでは、c プログラムを 64 ビット アプリケーションにコンパイルすることしか許可されておらず、プログラムの速度とメモリ使用量をテストしています。ただし、32 ビット ポインターを使用できる場合、プログラムは 64 ビットよりもはるかに少ないメモリを消費します。

64 ビット アプリケーションで 32 ビット ポインタを使用できるかどうか疑問に思っています。

助けてくれてありがとう

4

2 に答える 2

35

GCC を使用していますか?

-mx32 オプションは、int、long、およびポインター型を 32 ビットに設定し、x86-64 アーキテクチャー用のコードを生成します。(Intel 386 および AMD x86-64 オプション):

次に、ベンチマーク:)

于 2012-04-10T06:22:57.597 に答える
0

あなたは「あなた自身を転がす」ことができます。以下は、メモリ使用量をわずかに削減する可能性がありますが、短いポインターを絶対ポインターに変換する必要があるため、速度は向上しない可能性があり、オーバーヘッドが追加され、型チェックの利点のほとんどが失われます。

次のようになります。

typedef unsigned short ptr;
...

// pre-allocate all memory you'd ever need
char* offset = malloc(256); // make sure this size is less than max unsigned int

// these "pointers" are 16-bit short integer, assuming sizeof(int) == 4
ptr var1 = 0, var2 = 4, var3 = 8;

// how to read and write to those "pointer", you can hide these with macros
*((int*) &offset[var1]) = ((int) 1) << 16;
printf("%i", *((int*) &offset[var1]));

もう少しトリックを使えば、独自の brk() を発明して、オフセットからメモリを割り当てることができます。

その価値はありますか?IMO番号。

于 2012-04-10T06:10:53.043 に答える