typedef struct
{
BOOL bInUse;
BYTE bOtherData[2049 - sizeof(BOOL)];
} SOMEDATA, *PSOMEDATA; PSOMEDATA g_pSomeData = NULL; g_pSomeData = (PSOMEDATA) VirtualAlloc(NULL,
MAX_SOMEDATA * sizeof(SOMEDATA), MEM_RESERVE, PAGE_READWRITE); 当为g_pSomeData 调拨了物理存储后,为什么可以用数组的方式索引数据阿,例如: g_pSomeData[uIndex].bInUse = TRUE;
{
BOOL bInUse;
BYTE bOtherData[2049 - sizeof(BOOL)];
} SOMEDATA, *PSOMEDATA; PSOMEDATA g_pSomeData = NULL; g_pSomeData = (PSOMEDATA) VirtualAlloc(NULL,
MAX_SOMEDATA * sizeof(SOMEDATA), MEM_RESERVE, PAGE_READWRITE); 当为g_pSomeData 调拨了物理存储后,为什么可以用数组的方式索引数据阿,例如: g_pSomeData[uIndex].bInUse = TRUE;
挺难理解的!
BOOl实际就是int,占8个字节。
后面的BYTE一个占一个字节。
g_pSomeData起始位置向后移动8个字节就是bOtherData对应的第一个值,即:
g_pSomeData[8] == g_pSomeData.bOtherData[0]
g_pSomeData[9] == g_pSomeData.bOtherData[1]
g_pSomeData[10] == g_pSomeData.bOtherData[2]
和VirtualAlloc没什么关系,
用new,malloc,VirtualAlloc这些分配内存都是 连续的虚拟内存,否则返回错误
所以很简单的就能通过 返回的首地址 进行操作这块内存如
char *p = new char[10];
p[2] = 'a';另外LS别误导..
BOOL占4个字节,32位系统吧
g_pSomeData[8] == g_pSomeData.bOtherData[0]?-.-?
左边是结构体,右边是BYTE,相等??