Выделение> 4 ГБ оперативной памяти на 64-разрядном компиляторе работает, но при обращении к памяти более 4 ГБ ошибок при обращении - PullRequest
0 голосов
/ 23 марта 2019

Компиляция в визуальной студии могу выделить> 4 ГБ ОЗУ.Однако я не могу обратиться ко всей памяти, особенно к памяти выше 4 гигабайт

Нет проблем, если выделение меньше 4 гигабайт

Чего мне не хватает?

например //выделить большое изображение

// # определить ширину (биты) (((биты) + 31) / 32 * 4)

Width  = 24000;
Height = 50000;  
nBitsPerPixel =32
NumberColors =0

...

BITMAPINFOHEADER*   lpbmi;   // pointer to a Win 3.0-style DIB


size_t Size;

 Size =  sizeof(BITMAPINFOHEADER) +  sizeof(RGBQUAD)* NumberColors +WIDTHBYTES(Width*nBitsPerPixel) * Height;
try{

 m_pDIB  = (DWORD*)malloc (sizeof(DWORD) * (Size +3)/4);  // DWORD aligned
}

 …

lpbmi = (BITMAPINFOHEADER*)m_pDIB;
lpbmi->biSize = sizeof(BITMAPINFOHEADER); 
lpbmi->biWidth = Width; 
lpbmi->biHeight = Height; 
lpbmi->biPlanes = 1; 
lpbmi->biBitCount = (unsigned short)nBitsPerPixel; 


m_pImage = (BYTE*)m_pDIB + *(DWORD*)m_pDIB + sizeof(RGBQUAD)*m_NumberColors;

... хорошо, пока нет ошибок при запуске'' '' ''

однако, когда я обращаюсь к памяти

size_t p = Width  *4;
BYTE* pSrc = m_pImage;

// test
for ( DWORD j = 0; j < m_Height; j++)
{
    BYTE*   pMem;
    pMem = pSrc + size_t(j *p);
    memset(pMem, 0, m_Width);
}

, когда j равно 5261, выдается ошибка

0xC0000005: Место записи нарушения доступа

'' '' '' '' '' '' '' ''

windows 10, visual studio 2017, 64 бит (x64)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...