-1
許多操作系統都允許一個存儲映射文件,並且懶惰地讀取它們。如果操作系統可以有效地執行此操作,則它可以從thunk創建常規指針。任何操作系統是否允許應用程序員通過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);
}
P.S.揮發性限定符是必需的,因爲x指向的值意外地改變了嗎?另外,編譯器沒有理由認爲解引用x會改變計數器,所以在那裏需要一個volatile。
'如果操作系統可以有效地執行此操作,那麼它就有能力通過thunk創建常規指針。 –
@RobertHarvey thunk是一種懶散評估的數據。內存映射文件被懶惰地讀取。因此,內存映射文件是thunk的流,並且還有一個指向它的指針。 –
你的邏輯有問題。這有點像說狗是男人最好的朋友,每個人都需要一個朋友,所以每個人都應該有一隻狗。 –