__based
{
该关键字主要用来解决一些和共享内存有关的问题,它允许指针被定义为从某一点(指针)开始算的32位偏移值,
而不是内存中的绝对位置. 每当用__based指针处理数据,CPU为其加上基地址,以指向真正的位置.
指针vpBuffer在之后代码中指向一段被分配的内存,则llist相对于vpBuffer重新予以定位.
// based_pointers1.cpp
// compile with: /c
void *vpBuffer;
struct llist_t {
void __based( vpBuffer ) *vpData;
struct llist_t __based( vpBuffer ) *llNext;
};
以下代码示范了通过改变__based指针的基指针来改变它的指向
// based_pointers2.cpp
// compile with: /EHsc
#include <iostream>
int a1[] = { 1,2,3 };
int a2[] = { 10,11,12 };
int *pBased;
typedef int __based(pBased) * pBasedPtr;
using namespace std;
int main() {
pBased = &a1[0];
pBasedPtr pb = 0;
cout << *pb << endl;
cout << *(pb+1) << endl;
pBased = &a2[0];
cout << *pb <<