ホームページ >バックエンド開発 >C++ >C/C では関数ポインタとデータ ポインタに常に互換性がないのはなぜですか?

C/C では関数ポインタとデータ ポインタに常に互換性がないのはなぜですか?

DDD
DDDオリジナル
2024-12-05 02:12:13428ブラウズ

Why Aren't Function and Data Pointers Always Compatible in C/C  ?

関数ポインターとデータ ポインターが C/C で互換性がない理由

データ ポインターと関数ポインター間の変換は、ほとんどのプラットフォームで通常成功しますが、互換性は保証されません。これにより、次のような疑問が生じます。両方がメモリ アドレスを指していることを考えると、互換性は簡単ではないでしょうか?

その説明は、コンピューティング システムで採用されているアーキテクチャにあります。 C/C は特定のアーキテクチャに制限されず、メモリの管理方法を柔軟に行うことができます。ハーバード アーキテクチャなどの一部のアーキテクチャは、コードとデータ用に別個のメモリ空間を維持します。対照的に、フォン ノイマン アーキテクチャは、コードとデータを同じメモリに保存します。

コードとデータが同じ空間に存在するフォン ノイマン アーキテクチャの場合、関数ポインタとデータ ポインタの間の変換は、可能。ただし、実際の互換性は当然のものではありません。ハーバード アーキテクチャなど、2 つのメモリ空間を区別するシステムでは、変換は失敗します。

以上がC/C では関数ポインタとデータ ポインタに常に互換性がないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。