里面的变量会发生什么
What happens to the variables inside?
该函数中的变量会发生什么变化?
void function()
{
int a = 5;
a += a; //a contain 10
}
int main()
{
function();
return 0;
}
那么在函数(function(((执行完成后这里发生了什么,这个变量(a(是否仍然在内存中找到(使用内存(,其最后一个值是(10(还是完全销毁并且不再在内存中?
它并没有真正指定。我将首先描述这个幼稚的情况,然后解释为什么它可能并不真正适用。
天真地,存储a
的内存仍然存在,尽管a
名称在function
之外不再可用。内存可能仍然包含也可能不包含10
- 编译器可以自由覆盖它或不打扰它。显然,它也可以在之后的任何时候作为其他东西重复使用。
如果a
确实在内存中分配,则可能位于称为(调用(堆栈的区域,但这只是一个流行的调用约定,不是语言所要求的。
现在,编译器也可以自由地仅将a
存储在寄存器中,因为它注意到地址从未被占用,在这种情况下,它从未在传统意义上的内存中。
编译器还可以自由地注意到,a
从未被观察到使用过,并且不会费心发出 function
中的任何代码。
它通常存储在堆栈上,即它是自动分配的,并且这些自动分配的内存在每次函数调用时都会被回收。编译器可能会认为此变量实际上无用,并完全忽略它,因为它从未使用过,也不会影响代码的任何其他部分,因此可能发生的情况是:什么都没有。
在 C 和 C++ 中,重要的是要记住局部变量之间存在巨大差异,局部变量被认为是自动分配的,只有在函数执行时才能生存,而指针和new
则通过指针和动态分配,直到它们被delete
删除或程序终止。
当函数结束时,它的所有局部变量基本上都消失了(更准确地说,当它们的块结束时,它们消失了(。
谈论它们的"最后一个值"留在"内存中"是一个相当没有意义的练习,因为它们的值可能从一开始就从未出现在内存中。即使有,也不能保证它仍然存在,或者该记忆在任何意义上仍然可以访问。
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 在 .h 文件中的类中声明静态变量和在.cpp文件中声明"global"变量有什么区别
- 未初始化的变量有什么危险
- 在C/C++中将变量名定义为__00000001有什么好处吗
- 我可以在这里替换什么,因为我不能在 C# 中使用隐式变量的 lambda 函数?
- Visual C++: MSVC vs. GCC+CLANG: 处理 lambda 捕获类成员变量,正确的方法是什么?
- 存储变量的更有效方法是什么?
- 变量 BitMask 在函数 CeilLog2 中的实际效果是什么?
- 这个变量在 C++ 中的范围是什么?
- 从二进制流中读取时,将双精度变量的地址转换为 char* 意味着什么?
- 变量按什么顺序相乘
- 与普通变量相比,仅仅读取原子变量的性能有什么不同吗
- 使用 gtest 框架在单元测试代码中检查目标对象的私有变量的最佳实践是什么?
- C++在变量的内存地址上做什么来"deallocate"它?
- 有什么方法可以使用 int 变量来完成组件名称吗?
- 从"LLONG_MAX 秒"构造 std::chrono::毫秒变量时发生了什么?
- 将共享指针传递给函数参数 - 将其分配给局部变量的正确方法是什么
- 正在连接的等待条件变量的线程会发生什么情况?
- 当我不确定输入是什么时,使用什么变量?
- 对于非常大的整数,什么变量类型