许多操作系统允许存储映射文件,并懒惰地读取它们。如果操作系统可以做到这一点,那么它就有能力从 thunk 中创建常规指针。
是否有任何操作系统允许应用程序程序员从他自己的 thunk 中创建指针?
我知道操作系统在一定程度上已经支持此功能,因为可以创建一个管道,将其映射到内存中,并将一个进程连接到管道以完成我正在谈论的一些事情,所以这个功能似乎不太不可能或不合理。
这个特性的一个简单例子是一个指针,它计算它被取消引用的次数。以下程序将输出零,然后输出一。
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 需要一个 volatile 限定符,因为 x 指向的值会意外更改,对吧?同样,编译器没有理由认为取消引用 x 会改变计数器,所以那里也需要一个 volatile 对吗?