c语言,是谁为变量分配相应的存储空间?操作系统还是编译系统?

就是关于变量的存储的,静态存储方式是在编译阶段由编译系统为变量分配存储空间;动态存储方式是在程序运行期间由操作系统为变量分配存储空间。这句话对吗?

本质上,都需要操作系统分配,因为整个计算机都是操作系统管的。
只是分配的方式不同。
对于静态存储,编译器会将这些变量存储的位置写在可执行文件里,操作系统在执行一个可执行文件的时候,会分配好一块内存,把这个可执行文件的内容整体复制到内存里。
这个内存中的程序的副本叫做程序镜像。而程序镜像自然包括了静态存储的变量。
对于动态存储,那么就是运行的过程中再向操作系统申请内存了。
好比买盒饭,静态的是卖给你的盒饭,后者是你吃了不够,要添。但是显然盒饭都是卖盒饭的给你的。

编译系统有分配内存空间的权限么?