首页 > 解决方案 > 当您在 C(和其他语言)中声明变量时,幕后会发生什么?

问题描述

int x;我是一个相当初学者的 C程序员,我一直认为变量声明的工作方式是,当你声明一个像写了类似的东西x = 3;,如果编译时可以的话,编译器可能会将该声明改组到更有效的地方。

然而,我最近读到这不是发生的事情。那么会发生什么,为什么?幕后是否发生了一些具体的事情,或者声明实际上只是给编译器的消息,在它吐出的最终二进制文件中没有类似物?所有这些如何应用于函数声明?

标签: cdeclaration

解决方案


这两种说法都是正确的,在 C 标准中的不同“级别”。

C 标准主要描述了 C 实现如何在虚构的抽象计算机中运行。在这个模型中,当一个变量被定义(不仅仅是声明)时,内存是为它保留的。

但是,C 标准说,实际实现只需要产生结果,就好像它遵循抽象模型一样。该标准规定只有抽象模型的某些部分必须是可观察的。最值得注意的是,程序的输出是可观察的。

由于这条规则,只要输出和其他可观察的行为保持不变,编译器就可以按照它想要的任何方式更改程序的内部部分。因此,当编译器看到您x以特定方式使用某个变量并且它可以在不使用内存的情况下以另一种方式获得相同的结果时x,允许编译器更改程序以便没有实际内存用于x


推荐阅读