Linker script
The file that tells the linker where in memory each part of the program goes — a footnote on a PC, the entire map in firmware.
An operating system loads programs wherever it likes. A microcontroller has no operating system, just flash at one address and RAM at another, and the program has to match exactly. The linker script (.ld for GNU ld) declares those regions in a MEMORY block and then places the sections: code and constants (.text, .rodata) in flash, zero-initialised variables (.bss) in RAM.
The interesting case is .data, initialised variables, which must live in RAM but whose starting values have to survive a power cycle. The script therefore gives them two addresses, one in flash and one in RAM, and the startup code copies them across before main(). Symbols such as the top of the stack are defined here too. Most people take the vendor's template and never touch it — until a bootloader needs room.