0

WinSockからこの関数で使用されるFARとの違いを知りたいです。FAR *

int PASCAL FAR connect (SOCKET s, const struct sockaddr FAR * name, int len);
4

2 に答える 2

4

FARキーワードはもう使用されていないため、安全に無視できます。

昔、Win16 の時代には、16 ビットのポインター ( NEAR) と 32 ビットのポインター ( FAR) がありました。彼らの扱いは異なり、場合によっては単純ではありませんでした。Win32 の開始以来、この違いはなくなりました。Win64 もセグメント化されたメモリ モデルを使用していません。

同時に、ハードウェア レベルでは、セグメントは Intel アーキテクチャにまだ存在しています。しかし、これらの詳細は、Windows によってユーザー モード プログラマー (およびカーネル モード ドライバー ライター) には完全に隠されています。

これらのキーワードは、誰にも害を及ぼさないため、ヘッダー ファイルにまだ見つかる場合があります。

于 2012-09-12T07:00:38.613 に答える
3

どちらの場合も、このコードがセグメント化されたメモリ モデルで使用されると、ポインターのサイズが変更されます。const struct sockaddr FAR * namename が 32 ビット ポインターになることを示します。int PASCAL FAR connectconnect 関数へのポインタはすべて 32 ビット ポインタになると述べています。別の方法としてはNEAR、ポインターが 16 ビットであることを意味します。

しかし、Windows 3.1 以降、誰もセグメント メモリ モデルを使用していません。それらは非常に古いので、正しい用語を使用しているかどうかさえ確信が持てません。彼らはとても古いので、ここの常連客の半分以上は聞いたことがないでしょう. したがって、FAR の使用は無視してよいと自信を持って言えます。FAR が存在しないふりをするだけです。

これどこで見た?

于 2012-09-12T06:23:49.000 に答える