Moving Data, Bss and heap memory to external SRAM Atmega2560
TL;DR This will not work the way you want because the Atmega2560 does not have an external memory interface.
When you create a variable that gets stored in [internal] SRAM, it is possible for the processor's ALU to fetch that variable because the ALU and the SRAM are connected to the same internal memory bus. On higher-end processors (eg. STM32F756), you sometimes have a dedicated external-memory interface peripheral that can, for example, connect to SRAMs, DRAMs, SDRAMS, etc.
These peripherals are special, because they convert the internal memory bus protocol of the processor into the external hardware interface needed to load/store data to an external memory chip.
A simple[r] analogy is this: Your ATmega2560 has an SPI peripheral. When you configure that as an SPI Master and write something to the SPI Data-Register, the peripheral automagically clocks the bits out onto the bus with no further CPU intervention. You have translated a memory access (the data-register write) into a physical protocol.
Conversely, you could write code that would manually wiggle the IO pins to achieve the same hardware result as the SPI peripheral. This has a number of limitations, the main one being that you have to manually unpack a byte of data and set the pins at the appropriate times manually (via code). It should be obvious that this code is, under the hood, doing many memory reads and writes and you no longer have the automatic conversion of &quot;write to data register, clock out bits&quot; like with the dedicated SPI peripheral.
What you are trying to implement with your external SRAM and linker script fiddling is not going to work because as far as the microcontroller and the linker are concerned, that address space simply does not exist, and there is no hardware peripheral that can convert bus instructions into external memory signals. The projects you linked are simply using a software layer to manually control the IO pins to talk to the external SRAM (aka bit-banging).
Edit to add: You can still totally use an external SRAM, it just won't be automatic. You'll need a software library to make it work, and you'll have to explicitly store/load data through an API of some kind. If you are running out of SRAM and your program cannot be linked then you are out of luck. There are some extremely hacky ways around this but I do not recommend them. Instead either decrease the memory requirements of your application until it can be linked, or switch to a beefier microcontroller. I would recommend the latter, and say get rid of the external memory because even on a processor with an external memory interface, adding external memory is serious adder in cost, complexity, and time.