我是c++新手。
我有两段代码。
第一次
#include <iostream>
int main()
{
int firstInteger = 1;
std::cout << "First memory adress: " << &firstInteger << std::endl;
int secondInteger = 2;
std::cout << "Second memory adress: " << &secondInteger << std::endl;
return 0;
}
结果是
First memory adress: 00000039A2F7F934
Second memory adress: 00000039A2F7F954
第二个整数具有更大的十六进制值。
第二次
#include <iostream>
void someFunction() {
int secondInteger = 2;
std::cout << "Second memory adress: " << &secondInteger << std::endl;
}
int main()
{
int firstInteger = 1;
std::cout << "First memory adress: " << &firstInteger << std::endl;
someFunction();
return 0;
}
结果是
First memory adress: 00000093953EF744
Second memory adress: 00000093953EF624
这次第一个更大。
有人能解释一下它们之间的区别吗?
谢谢你。
1条答案
按热度按时间rqqzpn5f1#
不保证不同变量(或一般的完整对象)的地址之间的任何排序或距离,除非对象的存储在它们的生存期内不会重叠。编译器被允许以它认为合理和有效的方式布局堆栈。假设任何排序必须存在是错误的。
例如,在没有启用优化标志的GCC 12.2 x64上,我在两种情况下都得到了第二个变量的较小地址here,但您在启用
-O2
优化时的行为here。