ああ、そうですね。
技術的には、はい、できます。MMU や保護の形式 (または、リアル モードの x86) を使用しない組み込みデバイスでは、そこに投稿したことを正確に行うことができます。どのオペレーティング システムでもユーザー モードで実行できますが、実際に有効なメモリに到達する可能性は非常に低くなります。
実際には、いいえ、それだけではできません。仮想メモリとメモリ保護を考えると、アクセスしようとしている領域がマップされていない可能性が高く、失敗する可能性があります。さらに、保護されたメモリ (OS に属するものなど) にアクセスすると、アクセスが失敗します。これらのシナリオはどちらも、セグメンテーション違反の原因です。
あなたのステートメントは有効であり(有効な定義が異なるため)、プログラムは要求されたメモリにアクセスしようとします。実際には何にもマップされていない可能性があるというだけです。
これがメモリ マップド I/O の仕組みであることにも注意してください。書き込むと、接続された UART/シリアル ラインに 1 バイトを書き込むハードウェア制御レジスタがあるとします (簡単にするために、これは魔法のように機能し、他のレジスタを設定する必要はありません)。C では、これは私の過度に単純化されたデバイスに対して次のように記述されます。
#define UART1_OUT 0xFC56
volatile char* uart = UART1_OUT; // Definition of pointer to variable.
// volatile is required here. Look it up, but
// it basically stops your compiler optimising
// anything to do with this variable
*uart = 'A'; // Write an A character to the serial line
もちろん、実際のデバイスはもう少し複雑です ;)。