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

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

1个回答

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

caozhy
贵阳老马马善福专业维修游泳池堵漏防水工程 回复S t a r .: 关键是你怎么理解“分配”,对于静态变量,操作系统决定了变量在物理地址上的存储位置,编译器决定了变量相对于程序镜像的偏移位置。
12 个月之前 回复
qq_44568755
S t a r . 好的,明白了,谢谢!那我现在能否理解为,对于静态存储,在编译阶段时,编译系统只是将变量的存储空间位置写在可执行目标程序里,为变量分配存储空间还是操作系统做的事?
12 个月之前 回复
caozhy
贵阳老马马善福专业维修游泳池堵漏防水工程 回复S t a r .: 第二,谭浩强的思维注意是局限于dos操作系统,dos操作系统严格来说不是完整的操作系统,因为dos下的程序是单任务独占内存的,所以操作系统并不管你分配内存的事情,你面向的实际上是一个裸金属的8086的计算机。在dos下,整个8086机的所有内存,都是你的程序可见的。
12 个月之前 回复
caozhy
贵阳老马马善福专业维修游泳池堵漏防水工程 回复S t a r .: 第一,赋初值这件事情C语言是不会做的。除非你程序这么写,你这么写,那么编译器会生成相应的指令去赋值。
12 个月之前 回复
qq_44568755
S t a r . 意思就是说,对于静态存储,在编译阶段时,编译系统只是将变量的存储空间位置写在可执行文件里,分配存储空间还是操作系统做的事情对吧?不好意思哈问你这么多,主要是谭浩强的书讲的太矛盾了,没啥头绪了
12 个月之前 回复
qq_44568755
S t a r . 你好,对于静态存储,如果给变量初始化的话,编译系统是否还会把赋值信息写在可执行文件,然后在程序执行时,操作系统为其分配存储空间并赋初值?
12 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问