4

私が理解していることから、 intptr_t の定義はアーキテクチャによって異なります-プロセスのすべての均一なアドレス空間にアクセスできるポインターを表す能力があることが保証されています。

Nginx (人気のあるオープン ソース Web サーバー) は、フラグ (ブール値) として使用される型を定義し、これは への typedefintptr_tです。例として x86-64 アーキテクチャを使用すると、すべてのサイズのオペランドをカバーする大量の命令にアクセスできますが、なぜフラグを intptr_t に定義するのでしょうか。確かに、32 ビットの bool 型を使用するという伝統も同様に法案に適合するでしょうか?

私は32ビットのVを超えました。私が新しい開発者だったとき、8 ビット bools は自分自身を議論し、結論は、プロセッサ設計の複雑さのために、一般的なケースでは 32 ビット bool の方がパフォーマンスが優れているというものでした。では、なぜ 64 ビット bools に移行する必要があるのでしょうか?

4

2 に答える 2

2

intptr_tnginxがブール型を使用する理由を本当に知っているのは、nginx 開発者だけです。

あなたが言うように、32 ビットの bool は、一般的なケースでは 8 ビットの bool よりもパフォーマンスが優れていることがよくあります。私自身はベンチマークを行っていませんが、x86-64 の特定の状況では、64 ビットの bool が 32 ビットの bool よりも優れていることは不合理ではないように思えます。たとえば、nginx ソースでは、ほとんど ngnx_flag_tの が他の(u)intptr_ttypedef 型の構造体で発生することに気付きました。32 ビットの bool は、アラインメント パディングのために、ここでスペースを節約できない可能性があります。

intptr_tから/への変換を目的としたオプションのC99タイプであるため、少し奇妙な選択を見つけましたvoid *。しかし、私が見る限り、そのように使用されることはありません。おそらく、このタイプは、「ネイティブ」な単語サイズのタイプに最も近いものでしょうか?

于 2010-08-21T13:02:13.880 に答える