我教一门课程让学生们提出有关编程的问题(!):我有这个问题:
机器为什么选择变量进入内存?我们可以告诉它存储变量的位置吗?
我真的不知道该说些什么.这是我的第一次尝试:
编译器(不是机器)选择自动将变量存储在进程地址空间的位置.使用C,我们无法告诉机器存储变量的位置.
但是"自动"有点虎头蛇尾并且引发了一个问题...而且我已经意识到我甚至不知道它是编译器还是运行时或操作系统或谁来完成任务.也许有人能比我更好地回答学生的问题.
好的,我有一点菜鸟学生的问题.
所以我很熟悉堆栈包含子程序调用,堆包含可变长度数据结构,全局静态变量分配给永久存储器位置.
但这一切如何在较低的理论水平上发挥作用?
编译器是否只是假设它从地址0到地址无穷大有一个完整的内存区域?然后开始分配东西?
它在哪里布局指令,堆栈和堆?在内存区域的顶部,内存区域的结尾?
那么它如何与虚拟内存一起使用?虚拟内存对程序是透明的吗?
很抱歉bajilion的问题,但我正在采用编程语言结构,它一直在指这些区域,我想在更实际的层面上理解它们.
非常感谢!
memory compiler-construction assembly operating-system virtual-memory