Allocating > 4gig ram on 64 bit complier works but accessing memory over 4 gig errors when addressed

0

Compiling in visual studio I can allocate > 4gig ram. However I cannot address all the memory specifically the memory above 4 gig

There are no issues if the allocation is less than 4gig

What am I missing?

eg // alloc large image

//#define WIDTHBYTES(bits) (((bits) + 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;

... ok so far no run errors

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

however when I address the memory

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);
}

when j is 5261 get the error

0xC0000005: Access violation writing location

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

windows 10 , visual studio 2017, 64 bit (x64)

visual-c++
asked on Stack Overflow Mar 23, 2019 by FMeyer

0 Answers

Nobody has answered this question yet.


User contributions licensed under CC BY-SA 3.0