I'm trying to figure out who assigns addresses to variables when a C program is turned into an executable file. Compiler or linker. I think it's the task of the linker. If variables are in a single source file or across multiple files in a project, the linker should assign addresses to them