c - 像算术运算符的操作数这样的临时值是否放在堆栈中?

标签 c memory stack

我想知道当我使用算术运算符时内存中会发生什么:

int i;
i = 5 + 3;

值 5 和 3 是否会自动临时放入堆栈(就像为它们自动创建一些静态变量一样)?我想它们需要存在于某个地方才能进行添加,那么在哪里呢?

当涉及函数调用时会发生什么?

i = 5 + f(3);

传递给 f 的参数 3 是否存储在某处?那么 f 的返回值呢(假设 f 返回一个 int)?

非常感谢,

最佳答案

您的第一个示例将在编译时进行评估(请参阅 http://en.wikipedia.org/wiki/Constant_folding ),所以让我们忽略它。

在类似 i = f(3) + g(5) 的情况下,编译器有很多选择来实现它,具体取决于您正在使用的特定平台。它可能会根据需要将内容放入寄存器、堆栈,甚至其他地方。

关于c - 像算术运算符的操作数这样的临时值是否放在堆栈中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4795032/

相关文章:

Java栈类

C: Segmentation Fault -- 堆栈实现链表

c - 在我的练习算术测验程序和我制作的几乎所有其他程序中都缺少原型(prototype)

R、mclapply 的环境及移除变量

c - 文字操作数的类型

performance - 为什么在 F# 中使用引用大值的字段创建记录如此缓慢?

java - 在 Java 中获取计算机内存信息

c++ "Run-Time Check Failure #2 - Stack around the variable ' board' 已损坏”

c - C程序中结构的生命周期

c - 关于在 C 中仅使用运算符检查整数为零或负数的问题?