c - 当您在 C(和其他语言)中声明变量时,幕后会发生什么?
问题描述
int x;
我是一个相当初学者的 C程序员,我一直认为变量声明的工作方式是,当你声明一个像写了类似的东西x = 3;
,如果编译时可以的话,编译器可能会将该声明改组到更有效的地方。
然而,我最近读到这不是发生的事情。那么会发生什么,为什么?幕后是否发生了一些具体的事情,或者声明实际上只是给编译器的消息,在它吐出的最终二进制文件中没有类似物?所有这些如何应用于函数声明?
解决方案
这两种说法都是正确的,在 C 标准中的不同“级别”。
C 标准主要描述了 C 实现如何在虚构的抽象计算机中运行。在这个模型中,当一个变量被定义(不仅仅是声明)时,内存是为它保留的。
但是,C 标准说,实际实现只需要产生结果,就好像它遵循抽象模型一样。该标准规定只有抽象模型的某些部分必须是可观察的。最值得注意的是,程序的输出是可观察的。
由于这条规则,只要输出和其他可观察的行为保持不变,编译器就可以按照它想要的任何方式更改程序的内部部分。因此,当编译器看到您x
以特定方式使用某个变量并且它可以在不使用内存的情况下以另一种方式获得相同的结果时x
,允许编译器更改程序以便没有实际内存用于x
。
推荐阅读
- docker - 将没有源代码的 Web 应用程序容器化?
- graph-databases - 插入大数据时出现“gRPC 消息超出”错误
- c# - 删除我的程序后,系统托盘中隐藏图标的窗口保持打开状态图标
- rust - Tokio UDP 服务器
- r - 单击时发出动作按钮
- rabbitmq - Nservicebus + RabbitMQ 连接超时错误
- rest - 使用 hatoas 链接列表的方法的 junit 测试用例
- javascript - AngularJS - 将重复功能从控制器移动到服务
- karate - 从空手道列表中删除元素?
- apl - 在 APL 中检查列表的每个相邻对是否按顺序排列(默认编程)