多くのオペレーティング システムでは、マップ ファイルをメモリに保存し、遅延して読み取ることができます。オペレーティング システムがこれを行うことができれば、サンクから通常のポインタを作成する力が効果的に得られます。
アプリケーション プログラマが自分のサンクからポインタを作成できるオペレーティング システムはありますか?
パイプを作成し、それをメモリにマップし、プロセスをパイプに接続して、私が話していることのいくつかを達成できるため、限られた範囲でオペレーティングシステムがすでにこの機能をサポートしていることを知っているので、この機能はあまりないようです不可能または不合理。
この機能の簡単な例は、逆参照された回数をカウントするポインターです。次のプログラムは、0 を出力し、次に 1 を出力します。
static void setter(void* environment, void* input) {
/* You can't set the counter */
}
static void getter(void* environment, void* output) {
*((int*)output) = *((int*)environment)++;
}
int main(int argc, char** argv) {
volatile int counter = 0;
volatile int * const x = map_special_voodoo_magic(getter, setter, sizeof(*x),
&counter);
printf("%i\n", *x);
printf("%i\n", *x);
unmap_special_voodoo_magic(x);
}
PS x が指す値が予期せず変更されるため、volatile 修飾子が必要です。同様に、x を逆参照するとカウンターが変更されるとコンパイラが考える理由がないので、そこにも volatile が必要ですか?