XC16 can accept up to 8k of data in near memory. Above that you can use compiler options to allow for larger memory access of specify individual arrays for far memory using the far attribute.
far Attribute to locate large arrays in far memory
BYTE edid_emulation_buffer[16384] __attribute__ ((far));
extern BYTE edid_emulation_buffer[16384] __attribute__ ((far));
eds Attribute (when far doesn't work)
Using far with a PIC24FJ256GB206 and 32k of arrays we got the error: "Link Error: Could not allocate section .bss, size = 32768 bytes, attributes = bss ". The device has 96k of ram and the error message implied the compiler was simply faulty. However using the eds attribute solved it.
Use eds to specify Extended Data Space Access
__eds__ BYTE my_big_emulation_buffer[16384] __attribute__ ((eds));
__eds__ extern BYTE my_big_emulation_buffer[16384] __attribute__ ((eds));
To read and write within the array don't use a pointer and instead just use an index value:
my_big_emulation_buffer[some_index_variable] = 0x11;