2014-10-08 113 views
-13

我正在学习C++,我想知道变量是否是真实的东西。他们是否在电脑的某个地方与编译器交谈?变量是真实的东西吗?

+4

段错只是你的变量存在危机 – 2014-10-08 22:56:50

+0

任何形式的计算机上的一切确实是“真实的”并存储在某个地方。如果你想要这些细节而不是编程,这更像是一个硬件问题,所以我不会问StackOverflow – 2014-10-08 22:56:56

+3

它们是*在计算机*中。 [就像文件](https://www.youtube.com/watch?v=TV3Oncvz_cU) – HostileFork 2014-10-08 22:57:18

回答

9

变量是C++抽象机中的概念,它可能在计算机中可能有或没有具体的对应物。这个没有被严密保护的秘密是C++抽象机器不容易(它们是抽象的!),所以我们使用一些非常聪明的工具,编译器来模拟C++抽象机器的行为物理的,具体的电脑。

编译器将尝试将C++抽象机器中的概念映射到计算机中存在的事物,但这些映射不必完全一致。编译器经常会跳过将一些变量映射到任何东西,因为它们可以使您的程序像在C++抽象机器中运行一样运行,而无需映射它们。这只是编译器用来保持程序在其中一台抽象机器而不是计算机上运行的错觉的许多技巧之一。

这是否意味着变量是“真实的”?这听起来就像是一个来自哲学的老问题:are numbers real?

+2

如果B * -tree在数据库中发生段错误,但是所有数据都在FourSquare中存储了帐户配置文件的信息,是否丢失了? – HostileFork 2014-10-08 23:32:10

1

是变量保存在内存中。

  • 堆栈 - 如果它们是自动函数局部变量。
  • 堆 - 如果他们有newmalloc(通常不止,你指向一个变量)
  • 分配在每个进程的数据区 - 如果他们是全局或静态变量。
  • 在硬盘驱动器中 - 如果您的操作系统内存不足。
  • 在寄存器中 - 也许它们更靠近CPU,因为它们经常被使用。
  • 缓存L1,L2 - 用于减少从主存储器访问数据的时间,how they work

下面是一个SR锁存器,其存储在物理存储器中的1位。使用Latch circuits储存状态

enter image description here

的更多信息。

最终所有都归结为1s和0s存储在某个地方。变量,对象和其他高级概念是对机器级别下降的抽象表示。请记住,您正在使用1和0的machine language来控制硬件,然后在不同层的基础上构建硬件。

+2

你在回避这个问题。现在我们必须知道:内存和缓存真实的东西? – HostileFork 2014-10-08 23:00:25

+0

如果您的操作系统将您的进程换出了,也可能在磁盘上 – 2014-10-08 23:01:44

+0

更不用说只是保存在寄存器中。 – chris 2014-10-08 23:02:35

0

您的计算机有大量的内存(RAM)。作为第一个近似值,您可以想象,无论何时使用变量,编译器都会使用一些内存来存储该变量的值。这是第一个近似值;随着您不断学习和了解计算机的工作原理,您会发现这不是,确切地说是

4

编号变量是语言的一部分。该语言描述了一套抽象的,理想化的机器的说明。语言翻译器(编译器)需要生成在真实硬件上执行的“真实”机器指令。

在翻译过程中产生的指令可能与语言源代码有很多或很少有关;唯一的要求是结果程序的行为与抽象机器相似,就语言规则描述的输入程序的可观察效果而言。