The RealView ARM C Compiler supports placing a variable at a given memory address using the variable attribute
int var __attribute__((at(0x40001000)));
var = 4; // changes the memory located at 0x40001000
I don't know, but you can easily create a workaround like this:
int *var = (int*)0x40001000; *var = 4;
It's not exactly the same thing, but in most situations a perfect substitute.
I imagine letting the linker do that job is pretty common.
Inspired by answer by @rib, I'll add that if the absolute address is for some control register, I'd add
volatile to the pointer definition. If it is just RAM, it doesn't matter.