私はNULLポインターをチェックする以下の関数実装を持っています。これは、Linuxのドライバ、Cコードの一部です:この場合、 "volatile"のメリットは何ですか?
bool is_null_ponter(volatile void* ptr)
{
return (NULL == ptr)? true : false;
}
その場合の揮発性の利点は何ですか?なぜそれをレジスタに入れないのですか?
ありがとうございます。
私はNULLポインターをチェックする以下の関数実装を持っています。これは、Linuxのドライバ、Cコードの一部です:この場合、 "volatile"のメリットは何ですか?
bool is_null_ponter(volatile void* ptr)
{
return (NULL == ptr)? true : false;
}
その場合の揮発性の利点は何ですか?なぜそれをレジスタに入れないのですか?
ありがとうございます。
volatile
は、volatile
であってもエラーや警告なしに関数にすべてのポインタを渡すことができます。
これは偽装されていますが、あなたが見るドライバーは非常に専門的に書かれていないようです。
最初に、このようなポインタを完成させるには、const
修飾子を指定する必要があります。次に、実際にすべてのポインタを取得します。
このような関数の使用例はまったくありません。 _Bool
コンテキスト(ここでは!ptr
)では、ポインターが当然正しい答えにつながります。これは標準で指定されています。ここで見ているように違うやり方をしているのは、おそらくカーネルコミュニティではすごく嫌なことです。このドライバーが正しく見直されていないと思います。
私は同意します:私がこれを見て最初に思ったのは、 "この小さな宝石を誰がLinuxのレポに入れたかを見るために改訂履歴を見たいと思っています。 – Crashworks
私はこのコードが揮発性変数へのポインタであることを意図していたと感じています(したがって、ポインターはすべての読み取りでderef'dする必要があります) – Necrolis
http://stackoverflow.com/questions/3604569/what-kinds-of-optimizations-does-volatile-prevent-in-c/3604599#3604599を参照してください。類似した(しかし重複しないIMHO)質問 – jonsca