Experiment and learn how compilers, linkers and C runtime work cooperatively
PIE is for Positon Independent Executable. A PIE binary and all of its dependencies are loaded into random locations within virtual memory each time the application is executed. PIE binaries satisfy the ASLR requirements. PIE binaries can either be statically linked, or dynamically linked.