2

私のシステムでは: c++ の sizeof(long) は 4 別名 32 ビットです c# の sizeof(long) は 8 別名 64 ビットです

したがって、相互運用メソッドの宣言では、c++ の long を c# の int に置き換えていますが、これは安全ではないと感じていますか?

c++で long が int と同じサイズなのはなぜですか? そして長い長いは64ビットですか?長い長い長い長い次は何ですか??

4

3 に答える 3

7

最近の C ライブラリを持っていると仮定して行う最善の方法は、, ,include <stdint.h>を使用することです。これは、基盤となるプラットフォームのモデルに関係なく機能します。uint64_tint64_tuint32_tint32_t

しかし、興味がある方のために説明すると、根底にある問題は、異なるシステムが異なるモデルを使用しているということです。32 ビット システムでは、Posix と Windows の両方が ILP32 を使用します。つまり、integer、long、point はすべて 32 ビット長です。

64 ビットの場合、Posix と Windows は異なるモデルを使用します。

Posix は通常 LP64 を使用します。これは、32 ビットの整数、64 ビットの長さ、および 64 ビットのポインターを意味します。

Windows は LLP64 を使用します。これは、32 ビットの整数と long、64 ビットの long と 64 ビットのポインターを意味します。

于 2010-05-10T06:11:44.177 に答える
0

はい、プラットフォーム サイズの整数 (x86 プラットフォームでは 32 ビット、x64 プラットフォームでは 64 ビットなど) でない限り安全ですIntPtr

C(++) が定義された時点では、既定の計算サイズは 32 ビットではなかったことを忘れないでください。したがって、32 ビットは「長い」と定義されました。ただし、新しいプログラミング言語では、新しいデフォルト サイズが採用されています。

于 2010-05-10T06:11:12.120 に答える
-1

ほとんどのプラットフォームでは、C++longは と同じでint、4 バイトです。intこれは、 2 バイトで long がダブルワード (つまり 4 バイト) だった 16 ビット時代の残りの部分です。

したがって、C++ プラットフォームが 32 ビット long に依存している場合、それらを C# に変換することintは十分に安全です。

于 2010-05-10T06:12:45.257 に答える