我正在学习C ++,我想知道变量是否真实。它们是否在计算机中与编译器进行通信的位置?
答案 0 :(得分:9)
变量是 C ++抽象机中的概念,它们可能在计算机中具有或可能没有具体对应物。不那么严密的秘密是C ++抽象机器不容易得到(它们是抽象的!),所以我们使用一些非常聪明的工具,即编译器来模拟你的C ++抽象机器的行为。物理的,具体的计算机。
编译器将尝试将C ++抽象机中的概念映射到计算机中存在的内容,但这些映射不必完全100%。编译器通常会跳过将某些变量映射到任何变量,因为它们可以使您的程序行为就像它在C ++抽象机器中运行而不映射它们一样。这只是编译器用来保持程序在其中一台抽象机器而不是计算机上运行的幻想的众多技巧之一。
这是否意味着变量是“真实的”?这听起来就像是哲学中的一个古老问题:are numbers real?
答案 1 :(得分:4)
没有。变量是语言的一部分。该语言描述了一组抽象的,理想化的机器的指令。由语言翻译器(编译器)来生成" real"在真实硬件上执行的机器指令。
在翻译过程中生成的指令可能与语言源代码有很多或很少的关系;唯一的要求是结果程序的行为类似于抽象机器,与语言规则所描述的输入程序的可观察效果有关。
答案 2 :(得分:1)
是变量保存在内存中。
new
或malloc
(通常不仅仅是您指向的变量。)这是一个SR-Latch,它在物理内存中存储1位。
有关使用Latch circuits存储状态的更多信息。
最终,这一切都归结为1s和0s存储在物理上的某个地方。变量,对象和其他高级概念是机器级别内容的抽象表示。请记住,您正在控制machine language为1和0的硬件,然后在不同层的基础上构建硬件。
答案 3 :(得分:0)
您的计算机有大量内存(RAM)。作为第一个近似值,您可以想象无论何时使用变量,编译器都会占用少量内存来存储该变量的值。这是第一次近似;随着您不断学习并了解计算机的工作原理,您会发现这并非完全为真。